PHP MySQLI Result num_rows returns null


PHP MySQLI Result num_rows returns null

为什么num_rows会返回null?它应该始终返回一个数字,表示结果集中的确切行数。

以下代码为num_rows返回null:

<?php
include_once 'includes/psl-config.php';   // host, user, password, database
$db = new PDO('mysql:host='.HOST.';dbname='.DATABASE.';charset=utf8', USER, PASSWORD,
                array(PDO::ATTR_EMULATE_PREPARES => false, 
                      PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
if ($res = $db->query("select 'Hello world!'")){
    if (is_null($res)){
        echo "Result is null<br>";
    }
    if (is_null($res->num_rows)){
        echo "Num rows is null<br>";
    } else {
        echo "Rows returned: ".$res->num_rows."<br>";
    }
    while ($row = $res->fetch_row){
        echo "Text returned = $row[0]<br>";
    }
    echo "Done";
} else {
    echo "SQL error";
}

结果页面显示"Num_rows is null"。

这太简单了,我一定错过了什么!

  • 手册上说num_rows总是返回一个int
  • 我使用mysqli查询,它默认存储结果。我不需要使用store_result
  • 结果不为null

由于您使用的是PDO而不是MySQLi,因此num_rows不适用。话虽如此,总的来说,我发现rowCount()在MySQL方面是可靠的,然而,正如手册中所述,关于SELECT语句,你不应该依赖rowCount()

如果关联的PDOStatement执行的最后一条SQL语句是SELECT语句,则某些数据库可能会返回该语句返回的行数。然而,并非所有数据库都能保证这种行为,便携式应用程序也不应依赖这种行为。

建议使用COUNT() sql语句,以获得跨数据库平台的最大可靠性:

$db->query("SELECT COUNT(*) FROM table_name");

您正在使用PDO。所以应该是

$res->rowCount()

而不是

$res->num_rows