PHP 和 MySQL 我看不到这个错误?

标签 php mysql

在编写数据库相关代码时,我不断收到此错误。在过去的一个月左右的时间里,我一直在尝试各种不同的方法来解决我遇到的错误。我发现的唯一一个是关于消息传递的 foreach。

背景故事:我有一个个人网站,目前我正在尝试将消息传递和好友等社交功能融入其中。将来我计划添加个人资料图片等内容。

错误:

[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);
}

抱歉,这太乱了。我希望你能理解我的沮丧。还有更多错误,但这是目前最大的问题。如果你们中的任何人愿意在这篇文章之外提供更多支持,我将非常感激。

最佳答案

PHP Fatal error: Call to a member function bind_param() on a non-object

表示 var $stmt 是一个非对象,可能是 NULL ,根据 PHP 错误,它不是一个对象,可以调用任何方法。

查看您的 getUnreadMessages() 函数,我发现 $mysqli 是一个全局函数。是否有可能其他逻辑正在修改系统中其他地方的 $mysqli

您是否也看到类似的 PHP fatal error “调用非对象上的成员函数prepare()”?如果您这样做,这将表明 $mysqli 在上述逻辑之外以某种方式被修改。

此时,在我看来,$stmt 是一个非对象(var_dump($stmt); 出于兴趣显示了什么?),因为 $mysqli->prepare(...) 可能不会返回任何内容(或者返回某些东西,但不是一个对象)。

如果 SQL 字符串有效,我会通过 Google 搜索 MySQLi prepare() 应该输出什么,如果 SQL 字符串有效,会发生什么情况。

关于PHP 和 MySQL 我看不到这个错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37337226/

相关文章:

对象中的php对象,获取顶级对象实例

php - SQL 没有插入到 Yii 中有关系的表中

php - fetch_assoc() 查询问题

PHP 将数组元素添加到数据库不起作用

mysql - GRANT 中的密码与现有用户名的密码相同

PHP - 在数据库问题中编辑数据

mysql - MySQL 和 Oracle DB 之间的差异

javascript - 如何将变量传递给functions.php(Wordpress 站点)中的函数

PHP:使用父类作为接口(interface)中的类型声明

mysql - 查询将两列的结果合并为一列,并在 MYSQL 中使用替代值