我有这个查询:
$q = $dbc -> prepare("SELECT * FROM mailbox WHERE msgTo = ? && read = 0");
$q -> execute(array($user['id']));
$mailboxCount = $q -> rowCount();
现在在我的桌子上
msgTo = 1, read = 0
$user['id'] 等于1
但是行数返回 0 这是为什么呢?
PDOStatement->rowCount — 返回受最后一条 SQL 语句影响的行数
PDOStatement::rowCount() 返回受相应 PDOStatement 对象执行的最后一个DELETE、INSERT 或 UPDATE语句影响的行数。
看到这个example
并写清楚
对于大多数数据库,PDOStatement::rowCount() 不返回受 SELECT 语句影响的行数。相反,使用 PDO::query() 发出 SELECT COUNT(*) 语句,其谓词与预期的 SELECT 语句相同,然后使用 PDOStatement::fetchColumn() 检索将返回的行数。
恕我直言 rowCount() 仅匹配 UPDATE 和 DELETE 语句,而不匹配 SELECT 查询。通过选择 * 您从数据库中获取所有数据。由于您只需要行数,因此请改用 count() 函数 - 这样效率更高。
SELECT count(*) FROM mailbox WHERE msgTo = ? && read = 0