2009-12-24 25 views
1

我曾經在php4中編寫代碼,但現在我切換到php5,下面的代碼拋出下面的異常。這是爲什麼?在php中有什麼與mysqli?

CODE:

$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因此,當你打電話一個非對象的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循環在賦值給$ row之前會計算$ result-> fetch_assoc()的返回值,如果它返回false,那麼$ row永遠不會被設置,並且while循環不運行。

+0

如果$結果是假的查詢失敗/出現錯誤。在這種情況下,嘗試'echo $ mysqli-> errno。 ':'。 $ mysqli-> error;'用於調試目的。 – VolkerK 2009-12-24 08:50:34

1

您可以:

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

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