【发布时间】:2014-04-20 11:47:02
【问题描述】:
我的代码是这样的:
<?php
$user=$_SESSION['username'];
$avatar="SELECT us_avatar FROM all_users WHERE user_nick=?";
$query=$bd->prepare($avatar);
$query->bind_param('s',$user);
$query->execute();
$query->bind_result($img);
$query->fetch();
echo '<img src="'.$img.'" alt="" />';
?>
错误是 - 致命错误:在我检查过的非对象上调用成员函数 bind_param() 是否 avatar 是保留关键字,但它不是。我试过“SELECT us_avatar FROM all_users WHERE user_nick=?”但它不起作用。字段和表的名称与数据库中的相同。更新后会出现该错误,如果我不进行更新,它会运行良好。
【问题讨论】:
-
$query不是对象。但你把它当作一个。这会给您带来致命错误(并且是错误消息告诉您的内容)。请参阅Reference - What does this error mean in PHP? - 推荐阅读:How to get useful error messages in PHP? -
我将 $bd 包含在文件的顶部。一切正常。如果不是,我将无法登录。
-
@user3496946,我们怎么知道,除非你告诉那些事情?另外,我们找不到
session_start(); -
请注意,
PDO::prepare()可以在发生错误时返回FALSE(取决于您使用的 PDO 错误处理的类型),因此您不能得到 @987654333 @ 作为返回类型(参见:php.net/manual/en/pdo.prepare.php)。但是您没有在代码中处理这种错误情况。因此,您会看到错误。您需要处理错误情况并让 PDO 告诉您错误是什么(在您的情况下,使用 PDO 异常而不是返回 FALSE 可能更方便)。见PDO error handling 和php.net/pdo.error-handling。