2013-01-10 78 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

相关问题