我在PHP中创建了一个函数,用于检查数据库中是否存在记录。我用来获取行的查询是:
SELECT COUNT(*) AS Total, Conversation_ID FROM conversation WHERE User_ID = 3 AND With_User_ID = 4
现在,当我手动将此查询运行到我的phpmyadmin的sql选项卡中时,我得到了:
图像显示数据库中有一行符合我的查询条件,完全没问题。
现在,这是我的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
相同。
你能帮帮我吗?
答案 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();
。另请阅读第一条评论,这正是您的问题。