为什么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