我在 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
.
你能帮我吗?
最佳答案
Returns the number of rows in the result set. The use of mysqli_stmt_num_rows() depends on whether or not you used mysqli_stmt_store_result() to buffer the entire result set in the statement handle.
http://www.php.net/manual/en/mysqli-stmt.num-rows.php
它计算使用mysqli_stmt_store_result()
存储的结果,而不是实际的行。
添加 $query->store_result();
之前。另请阅读第一条评论,这正是您的问题。
关于php - ..->num_rows 显示错误结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20844765/