2009-12-24 2 views
1

Я использовал код в php4, но теперь я переключился на php5, и следующий код вызывает следующее исключение. Почему это?Что с mysqli в php?

КОД:

$mysqli = new mysqli($CONFIG_DB_HOST,$CONFIG_DB_USERNAME,$CONFIG_DB_PASSWORD,$CONFIG_DB_NAME); 
$result = $mysqli->query("select * from temp_table where url = '" . $mysqli->real_escape_string($in_url) . "'"); 
$row = $result->fetch_assoc(); 
$out_title = $row['title']; 

Исключение:

Fatal error: Call to a member function fetch_assoc() on a non-object in detail.php on line 13 

ответ

2

Похоже, есть некоторые проблемы с вашим запросом, и в результате того, что метод query() возвращает false, а не result object и когда вы звоните a fetch_assoc() метод на не-объекте вы получаете эту ошибку. Распечатайте запрос, который выполняется, и попробуйте запустить с помощью phpmyadmin и посмотреть, какую ошибку вы получите.

Также всегда проверять возвращаемое значение метода запроса(), прежде чем продолжить:

if (!$mysqli->query("query")) 
{ 
    printf("Error: %s\n", $mysqli->error); 
} 
2

Вы также можете проверить, если ваш $ результат содержит фактический результат:

if ($result != false) { 
    $row = $result->fetch_assoc(); 
}else{ 
    // do something else! 
    // maybe trigger_error()? 
} 

Рекомендуем также имейте в виду, что если ваш результат содержит более одного ряда, вы, скорее всего, захотите пройти через петлю

while ($row = $result->fetch_assoc()) { 
    $out_title = $row['title']; 
} 

Выполнение этого также не даст вам получить полученную вами ошибку, потому что цикл while будет оценивать возвращаемое значение $ result-> fetch_assoc(), прежде чем присваивать его $ row, если он возвращает false, строка никогда не будет установлена, и цикл while не запускается.

+0

Если $ результат неверен запрос не удалось/произошла ошибка. В этом случае попробуйте 'echo $ mysqli-> errno. ':'. $ mysqli-> error; 'для целей отладки. – VolkerK

1

Вы можете:

<?php 
    if ($result = $mysqli->query($query)) { 

     /* fetch associative array */ 
     while ($row = $result->fetch_assoc()) { 
      //more things 
     } 
    }