..-> num_rows显示错误的结果

时间:2013-12-30 17:52:07

标签: php mysql sql mysqli mysql-num-rows

我在PHP中创建了一个函数,用于检查数据库中是否存在记录。我用来获取行的查询是:

SELECT COUNT(*) AS Total, Conversation_ID FROM conversation WHERE User_ID = 3 AND With_User_ID = 4

现在,当我手动将此查询运行到我的phpmyadmin的sql选项卡中时,我得到了: result_of_running_query

图像显示数据库中有一行符合我的查询条件,完全没问题。

现在,这是我的PHP函数:

public static function CheckIfConversationExists($userid, $withuserid) {
    if(Utilities::IsValid($withuserid) && Utilities::IsValid($userid)) {
        Database::OpenConnection();

        $userId = Utilities::SafeString(Database::$databaseConnection, $userid);
        $withUserId = Utilities::SafeString(Database::$databaseConnection, $withuserid);

        $query = Database::$databaseConnection->prepare("SELECT COUNT(*) AS Total, Conversation_ID FROM conversation WHERE User_ID = ? AND With_User_ID = ?");
        $query->bind_param("ii", $userid, $withuserid);
        $result = $query->execute();
        $query->bind_result($total, $conversationid);
        if($result && $query->num_rows > 0) {
            $id = array("Conversation_ID"=>"{$conversationid}");
            return json_encode($id);
        } else {
            return -1;
        }
        Database::CloseConnection();
    }
}

问题是,当我回显$query->num_rows时,我得到的结果是0,因此我的函数始终返回-1。但是,正如您所看到的,我在数据库中运行的同一查询给了我一行。

现在要清除你,你会问,如果函数中的值是正确的。是的,我已经通过在每个可能的地方回应它们来检查它们三次,我得到的结果与3 and 4相同。

你能帮帮我吗?

1 个答案:

答案 0 :(得分:1)

  

返回结果集中的行数。指某东西的用途   mysqli_stmt_num_rows()取决于你是否使用过   mysqli_stmt_store_result()缓冲整个结果集   陈述句柄。

http://www.php.net/manual/en/mysqli-stmt.num-rows.php

它会计算使用mysqli_stmt_store_result()存储的结果,而不是实际的行。

之前添加$query->store_result();。另请阅读第一条评论,这正是您的问题。