За последние 24 часа нас посетили 17358 программистов и 1626 роботов. Сейчас ищут 1045 программистов ...

Помогите разобраться с функцией

Тема в разделе "PHP для новичков", создана пользователем xvoid, 8 ноя 2007.

  1. xvoid

    xvoid Активный пользователь

    С нами с:
    10 авг 2006
    Сообщения:
    152
    Симпатии:
    0
    Есть форум (phpbb), временами когда заходишь он выдает ошибки:

    Код (Text):
    1. Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\WEB\Apache\htdocs\db\mysql4.php on line 339
    2.  
    3. Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in C:\WEB\Apache\htdocs\db\mysql4.php on line 525
    4. Template->loadfile(): No files found for handle body
    Так вот пытаюсь разобраться в сущности первой:
    mysql4.php
    Код (Text):
    1.     function sql_fetchrow($query_id = 0)
    2.     {
    3.         $mtime = microtime();
    4.         $mtime = explode(" ",$mtime);
    5.         $mtime = $mtime[1] + $mtime[0];
    6.         $starttime = $mtime;
    7.  
    8.         if( !$query_id )
    9.         {
    10.             $query_id = $this->query_result;
    11.         }
    12.  
    13.         if( $query_id )
    14.         {
    15. /* 339 строка */  $this->row[$query_id] = mysql_fetch_array($query_id, MYSQL_ASSOC);
    16.  
    17.             $mtime = microtime();
    18.             $mtime = explode(" ",$mtime);
    19.             $mtime = $mtime[1] + $mtime[0];
    20.             $endtime = $mtime;
    21.  
    22.             $this->sql_time += $endtime - $starttime;
    23.  
    24.             return $this->row[$query_id];
    25.         }
    26.         else
    27.         {
    28.             $mtime = microtime();
    29.             $mtime = explode(" ",$mtime);
    30.             $mtime = $mtime[1] + $mtime[0];
    31.             $endtime = $mtime;
    32.  
    33.             $this->sql_time += $endtime - $starttime;
    34.  
    35.             return false;
    36.         }
    37.     }
    Что делает $this->row[$query_id] = mysql_fetch_array($query_id, MYSQL_ASSOC); как я понимаю приравнимавие массива к mysql_fetch_array($query_id, MYSQL_ASSOC); и что есть $query_id

    Спасибо!
     
  2. xvoid

    xvoid Активный пользователь

    С нами с:
    10 авг 2006
    Сообщения:
    152
    Симпатии:
    0
    mysql_fetch_array -- Обрабатывает ряд результата запроса, возвращая ассоциативный массив, численный массив или оба.

    supplied argument is not a valid MySQL result resource - переданный аргумент это направильный mysql результат - такое может быть когда нет связи с базой или это программное ?
     
  3. Vitas

    Vitas Активный пользователь

    С нами с:
    7 фев 2006
    Сообщения:
    595
    Симпатии:
    0
    Адрес:
    Новосибирск, Академгородок
    Скорее всего ошибка в SQL запросе. Покажи код не функции а тот код где она вызывается.
     
  4. xvoid

    xvoid Активный пользователь

    С нами с:
    10 авг 2006
    Сообщения:
    152
    Симпатии:
    0
    Вызывается она в скрипте дважды и оба раза в циклах:



    PHP:
    1. // Start page proper
    2. if( !($result = $db->sql_query($sql)) )
    3. {
    4.     message_die(GENERAL_ERROR, 'Could not query categories list', '', __LINE__, __FILE__, $sql);
    5. }
    6.  
    7. $category_rows = array();
    8. while ($row = $db->[b]sql_fetchrow[/b]($result))
    9. {
    10.     $category_rows[] = $row;
    11. }
    12. $db->sql_freeresult($result);
    13.  
    14.  
    15. if( ( $total_categories = count($category_rows) ) )
    16. {
    17.  
    18.     // Define appropriate SQL
    19.     switch(SQL_LAYER)
    20.     {
    21.         default:
    22.             $sql = "SELECT f.*, p.post_time
    23.                 FROM (( " . FORUMS_TABLE . " f LEFT JOIN " . POSTS_TABLE . " p ON p.post_id = f.forum_last_post_id ))
    24.                 ORDER BY f.cat_id, f.forum_order";
    25.             break;
    26.     }
    27.     if ( !($result = $db->sql_query($sql)) )
    28.     {
    29.         message_die(GENERAL_ERROR, 'Could not query forums information', '', __LINE__, __FILE__, $sql);
    30.     }
    31.  
    32.     $forum_data = array();
    33.     while( $row = $db->[b]sql_fetchrow[/b]($result) )
    34.     {
    35.         $forum_data[] = $row;
    36.     }
    37.     $db->sql_freeresult($result);
    38.