我目前在使用预准备语句时执行两个查询。 一个用于获取结果,另一个用于获取找到的行数。 我以前可以通过一个带有mysql_num_rows
的查询来执行此操作。对于较大的查询,我不希望复制和粘贴查询并使用每个查询的 COUNT。 有没有办法像mysql_num_rows
一样在一个查询中做到这一点?
$connectdb->prepare("SELECT * FROM users WHERE username=:username");
$connectdb->prepare("SELECT COUNT(*) FROM users WHERE username=:username");
$query = $connectdb->execute(array(':username'=>$username));
$numrows = $query->fetchColumn();
if($numrows!=0) {
while(false !==($row = $query->fetch()))
{
该语句已具有行计数:PDOStatement::rowCount()
因此,仅使用 $query->rowCount();
和您的第一个查询
PS:你的代码看起来甚至不起作用。正确的应该是:
$stmt = $connectdb->prepare("SELECT * FROM users WHERE username=:username");
$stmt->execute(array(':username'=>$username));
...
$query=$connectdb->prepare("SELECT * FROM users WHERE username=:username");
$query->execute(array(':username'=>$username));
$numrows = $query->rowCount();
PDO中有3个选项可用:
1)您目前拥有的,通过使用COUNT()
:
$numrows = $query->fetchColumn();
2) fetchColumn()
而不执行查询本身:
$pdo->query("SELECT COUNT(*) from users")->fetchColumn();
3)rowCount()
注意 - 显然在MySQL中不起作用,我不建议这样做:
PDOStatement::rowCount();
编辑 - 澄清 - 第 3 条,这是来自 PDO 文档的参考:
对于大多数数据库,PDOStatement::rowCount() 不返回受 SELECT 语句影响的行数。相反,使用 PDO::query() 发出与预期 SELECT 语句具有相同谓词的 SELECT COUNT(*) 语句,然后使用 PDOStatement::fetchColumn() 检索将返回的行数。然后,应用程序可以执行正确的操作。