PHP MySQL скрипт не работает - PullRequest
       7

PHP MySQL скрипт не работает

1 голос
/ 18 октября 2010

Я работаю над сайтом и создал этот экспериментальный скрипт, который динамически заполняет меню категорий на основе записи в базе данных.

Это работало в течение дня, а затем внезапно прекратилось. Я изменил мои включения для требований, и это выдало мне это сообщение об ошибке

Неустранимая ошибка: превышено максимальное время выполнения 30 секунд в /home1/advertbo/public_html/dev_area/origocloud/include/views/blog/dbget.php в строке 34

function getBlogMenu(){
$dbhost = 'localhost';
$dbuser = ' ';
$dbpass = ' ';

$con = mysql_connect($dbhost, $dbuser, $dbpass);
if (!$con)
  {
    die('Could not connect: ' . mysql_error());
  }

mysql_select_db("ado_ocblog", $con);

$htmlString = "";

$result = mysql_query(
    "SELECT *
    FROM subCat
    JOIN headCat ON subCat.headid = headCat.id
    ORDER BY headid ASC;");

$array = mysql_fetch_array($result);
mysql_close($con);

$pre = NULL;
$hc = 0;
$sc = 1;
while ($array) {
    if($pre == NULL){
        $pre = $row["headc"];
        $test[0][0]=$row["headc"];
        $test[0][1]=$row["subc"];

    }
    else
    {
        if($pre ==$row["headc"]){
            $sc++;
            $test[$hc][$sc] = $row["subc"];

        }
        else
        {
            $hc++;
            $sc = 1;
            $test[$hc][0]=$row["headc"];
            $test[$hc][$sc]=$row["subc"];
            $pre = $row["headc"];
        }
    }

}

foreach( $test as $arrays=>$cat)
{
        $first = TRUE;
        foreach($cat as $element)
        {
            if($first == TRUE)
            {
                $htmlString.= '<h3><a href="">'.$element.'</a></h3>
                        <div>
                            <ul>
                    ';
                $first = FALSE;
            }
            else
            {
                $htmlString.= '<li><a class="sub_menu" href="#">'.$element.'</a></li>';
            }

        }
        $htmlString.= '</ul> </div>';
}
return $htmlString;


}

Я действительно застрял, страница просто продолжает отсчитывать время, когда я вызываю функцию

Ответы [ 2 ]

6 голосов
/ 18 октября 2010

Попробуйте это:

while ($array = mysql_fetch_array($result)) {}

Взгляните на документы PHP http://php.net/mysql_fetch_array

Если не работает, ваш SQL-запрос возвращает слишком много значений и приводит к срыву выполнения PHP

=]

0 голосов
/ 18 октября 2010

Я думаю, пришло время сделать шаг назад и посмотреть, что вы делаете :) Эта функция должна делать то, что вы хотите (даже если вы исправили проблему бесконечного цикла в функции, которую вы дали, я не думаю, что будет действовать так, как вы хотите.):

function getBlogMenu(){
  $dbhost = 'localhost';
  $dbuser = ' ';
  $dbpass = ' ';

  $con = mysql_connect($dbhost, $dbuser, $dbpass);
  if (!$con)
  {
    die('Could not connect: ' . mysql_error());
  }

  mysql_select_db("ado_ocblog", $con);

  $htmlString = "";
  $result = mysql_query(
      "SELECT *
      FROM subCat
      JOIN headCat ON subCat.headid = headCat.id
      ORDER BY headid ASC;");

  // arrays can have strings as keys as well as numbers,
  // and setting $some_array[] = 'value'; (note the empty brackets []) 
  // automatically appends 'value' to the end of $some_array,
  // so you don't have to keep track of or increment indexes
  while ($row = mysql_fetch_assoc($result))
  {
    $test[$row["headc"]][] = $row["subc"];
  }

  // don't close the connection until after we're done reading the rows
  mysql_close($con);

  // $test looks like: array('headc1' => array('subc1', 'subc2', 'sub3'), 'headc2' => array('subc4', 'subc5'), ...)
  // so we step through each headc, and within that loop, step through each headc's array of subc's.
  foreach($test as $headc => $subc_array)
  {
    $htmlString.= '<h3><a href="">'.$headc.'</a></h3><div><ul>';
    foreach($subc_array as $subc)
    {
      $htmlString.= '<li><a class="sub_menu" href="#">'.$subc.'</a></li>';
    }
    $htmlString.= '</ul></div>';
  }

  return $htmlString;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...