使用预准备语句时,num_rows()始终返回0

时间:2016-08-31 23:26:42

标签: php mysqli

我已经尝试过查看其他所有人的堆栈溢出标题中的确切错误,但我仍然无法解决这个问题。

我使用http://andrew-greig.net/portfolio/better_mysqli.htm进行mysqli扩展,因为它确实使绑定项更容易成为数组。我一直试图从原生的mysql转移到mysqli,我总是遇到同样的问题,试着找出是否有结果。

这是我目前的代码

$searchSQL = $mysqli->select("SELECT * FROM coreUsers WHERE Username = ? AND Password = ?", $row, array($username, $password));
var_dump($searchSQL);

while($searchSQL->fetch())
    {

        echo "<br/>---FOUND Valid LOGIN!!</br>";

        exit;
    }   

我得到的输出是..

    object(mysqli_stmt)#2 (10) { ["affected_rows"]=> int(-1) ["insert_id"]=> 
int(0) ["num_rows"]=> int(0) ["param_count"]=> int(2) ["field_count"]=> int(19) 
["errno"]=> int(0) ["error"]=> string(0) "" ["error_list"]=> array(0) { } 
["sqlstate"]=> string(5) "00000" ["id"]=> int(1) } 
    ---FOUND Valid LOGIN!!

所以它找到了记录,如果我输出记录信息,它确实从行响应中回显出用户名和密码,但num_rows总是0.为此我永远无法得到

$rowCount = $searchSQL->num_rows();

在执行while循环之前尝试查看是否有实际结果时工作。

---- ---- EDIT

我不知道为什么这被标记为重复。添加的帖子指的是&#34; boolean&#34;那不是我的错误。我是对象。

if ($searchSQL === false) {
echo "invalid";
} else {
echo "valid";
}

此代码无效(从您标记为重复的帖子),因为如果您实际查看我在扩展程序中使用的代码,我的响应将始终返回true。

1 个答案:

答案 0 :(得分:0)

正如@Ghost所提到的,我失踪的问题是1行代码。

 $stmt->store_result();
 $rowCount = $stmt->num_rows;

必须先调用此方法,然后才能在预准备语句中访问num_rows()。