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

时间:2016-05-20 02:56:22

标签: php mysql

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

背景故事:我有一个个人网站,我目前正在努力将社交功能(如消息传递和朋友)纳入其中。在未来,我计划添加个人资料图片等内容。

错误:

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

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

1 个答案:

答案 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就会输出MySQL prepare() 假设输出的内容。