我在使用预准备语句时目前会进行两次查询。一个用于获取结果,另一个用于获取找到的行数。我之前可以使用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()))
{
答案 0 :(得分:1)
该陈述已包含行数:PDOStatement::rowCount()
因此请仅使用$query->rowCount();
和您的第一个查询
PS:你的代码看起来不会起作用。正确的应该是:
$stmt = $connectdb->prepare("SELECT * FROM users WHERE username=:username");
$stmt->execute(array(':username'=>$username));
...
答案 1 :(得分:1)
$query=$connectdb->prepare("SELECT * FROM users WHERE username=:username");
$query->execute(array(':username'=>$username));
$numrows = $query->rowCount();
答案 2 :(得分:0)
PDO中有3个选项:
1)您目前使用的COUNT()
:
$numrows = $query->fetchColumn();
2) fetchColumn()
而不执行查询本身:
$pdo->query("SELECT COUNT(*) from users")->fetchColumn();
3) rowCount()
注意 - 显然在MySQL中不起作用,我不建议这样做:
PDOStatement::rowCount();
编辑 - 澄清 - 第3号,这是来自PDO Doc的参考:
对于大多数数据库,PDOStatement :: rowCount()不返回受SELECT语句影响的行数。相反,使用PDO :: query()发出带有与预期SELECT语句相同的谓词的SELECT COUNT(*)语句,然后使用PDOStatement :: fetchColumn()来检索将返回的行数。然后,您的应用程序可以执行正确的操作。