编写数据库相关代码时,我不断收到此错误。在过去一个月左右的时间里,我一直在尝试各种不同的方法来解决我遇到的错误。我发现唯一一个关于消息传递的预告。
背景故事:我有一个个人网站,我目前正在努力将社交功能(如消息传递和朋友)纳入其中。在未来,我计划添加个人资料图片等内容。
错误:
[TIME] [:error] [pid PID] [client IP:PORT] PHP Fatal error: Call to a member function bind_param() on a non-object in /www/hub/models/funcs.php on line 1656, referer: http://my.website.com/hub/users.php
错误指向此行:
$stmt->bind_param("i", $user);
由此函数访问:
function getUnreadMessages($user)
由此资源访问:
left-nav.php
由网站上的每个页面访问,该页面试图运行以下代码行:
$unread = getUnreadMessages($loggedInUser->user_id);
这样它就可以运行这些代码行:
if($unread > 0){
echo "<li><a href='user_messages.php'>Messages</a>(".$unread.")</li>";
}else{
echo "<li><a href='user_messages.php'>Messages</a></li>";
}
这是完整的功能:
function getUnreadMessages($user){
global $mysqli,$db_table_prefix;
$stmt = $mysqli->prepare("SELECT
id,
from_user,
to_user,
time_sent,
subject,
message,
deleted
FROM ".$db_table_prefix."messages
WHERE
to_user = ?
AND
read = 0
");
$stmt->bind_param("i", $user);
$stmt->execute();
$unread = $stmt->num_rows;
$stmt->close();
return($unread);
}
对不起,这太乱了。我希望你能理解我的沮丧。还有更多错误,但这是目前最大的问题。如果你们中的任何一个愿意在这篇文章之外提供更多的支持,我会非常感激。
答案 0 :(得分:0)
PHP致命错误:在非对象上调用成员函数bind_param()
意味着var $stmt
是一个非对象,可能是NULL
,这意味着根据PHP错误,它不是一个 any 的对象方法可以被调用。
查看您的getUnreadMessages()
函数,我发现$mysqli
是全局的。是否有可能其他逻辑正在修改系统中其他地方的$mysqli
?
你是否也看到类似的PHP致命错误&#34;在非对象上调用成员函数prepare()&#34; ?如果你这样做,这将指向$mysqli
以某种方式在上述逻辑之外进行修改。
此时它看起来虽然$stmt
是一个非对象(var_dump($stmt);
显示出兴趣?)因为$mysqli->prepare(...)
可能没有返回任何内容(或者是返回某些内容,但不是一个对象。)
如果SQL字符串有效以及在不是
时会发生什么情况,那么Google就会输出MySQLprepare()
假设输出的内容。