2013-01-10 76 views
0

我得到我的第二頁上的以下消息,並沒有什麼作品...收到致命錯誤消息

Fatal error: Call to a member function fetch_assoc() on a non-object in C:\xampp\htdocs\send.php on line 6

這裏是我顯示電子郵件地址的第一頁和它的作品不錯,但時我點擊電子郵件並轉到info.php我得到那個錯誤..什麼是錯的?

<?php 
$mydb = new mysqli('localhost', 'root', '', 'database'); 
$sql = "SELECT * FROM test "; 
$result = $mydb->query($sql); 

while($row = $result->fetch_assoc()){ 

echo '<td><a href="info.php?email='.$row['Email'].'">'.$row['Email'].'</a> </td>'; 

echo "<br/>"; 
} 
$mydb->close(); 

?> 

這裏是info.php..Just記住,我試圖顯示行年齡和我在數據庫中的一個同桌單個用戶的名稱..

<?php 
$mydb = new mysqli('localhost', 'root', '', 'database'); 
$sql = "SELECT * FROM User WHERE id = " . $_GET['email']; 
$result = $mydb->query($sql); 

while($row = $result->fetch_assoc()){ 
echo $row['Age'] . " " . $row['Name'] ; 
echo "<br/>"; 
} 
$mydb->close(); 
?> 
+0

嘗試在您的info.php中的$ sql和$ result中放置var_dump。如果$ sql看起來不會返回結果,那是錯誤的。如果$ result未定義,則會發生錯誤。 – dmaij

回答

2

這意味着您的查詢沒有正確運行。你應該把支票:

if (!$result) { 
    echo $mydb->error; 
} 

die(); 

Prepared Statements

,因爲你正在做的用戶輸入,您應該使用它們。已準備好的語句提供了良好的清理輸入級別,以便用戶不會混淆數據庫。

它也像你有電子郵件列,但試圖基於選擇用戶:

ID =電子郵件。

這是常見的做法,使ID的INT和電子郵件可能會是VARCHAR,所以這種比較是沒有意義的,因爲你不是活得(如果你的表模式是按照通常的做法)

+0

謝謝但查詢有什麼問題?它顯示了我在將代碼放在'where子句'中的未知列'thankyou' – Mark

+1

正如Chaud所說,你並沒有在電子郵件中加引號。儘管在用戶輸入中使用準備好的語句會更好。 – Jormundir

+0

準備好的語句也將確保你已經爲數據庫正確地形成了字符串。 – Jormundir

1

查詢失敗不要在電子郵件地址附上引號。

$sql = "SELECT * FROM User WHERE id = '" . $_GET['email'] . "'"; 
+0

你能告訴我在哪裏?我已經在電子郵件地址附加了單引號 – Mark

+1

儘管技術上正確,但更好的選擇是使用[綁定參數]([綁定參數])建議[準備語句](http://php.net/manual/en/mysqli.prepare.php) http://php.net/manual/en/mysqli-stmt.bind-param.php) – Phil

+0

謝謝我把你的代碼,但仍然得到錯誤.. – Mark

相關問題