【发布时间】:2011-12-14 05:49:39
【问题描述】:
直到最近我一直在使用mysql_real_escape_string() 来修复我的大部分变量,然后再对我的数据库进行 SQL 查询。一个朋友说我应该改用 PDO 的预处理语句,所以在阅读了一些关于它们的信息后,我现在切换到它们。
到目前为止,我在切换时只遇到了一个问题,那就是计算SELECT 语句返回的行数。有时在我的代码中,我会运行 SQL 查询,然后计算从 SELECT 语句返回的行数。根据是否返回结果集,我会采取不同的行动。有时我确实需要使用它的结果集。 MySQL 让我在mysql_num_rows() 之后直接转到mysql_fetch_assoc() 没有问题。但是,PDO 似乎没有 mysql_num_rows() 这样的东西。
我一直在阅读一些关于 SO 的回复,这些回复给了我一个解决方案,要么在 SQL 语句中使用 COUNT(),要么在结果集上使用 PHP 函数 count()。如果我在某些地方不需要结果集,COUNT() 在 SQL 语句中可以正常工作,但是,有几个人提到在结果集上使用 count() 效率相当低。
所以我的问题是,如果我需要计算选择的行数(如果有的话),我应该怎么做,然后运行带有结果集的脚本?在这种情况下,在结果集上使用count() 是唯一的方法,还是有更有效的方法?
下面是一个类似于我之前的 SQL 代码的简短示例:
$query=mysql_query('SELECT ID FROM Table WHERE Name='Paul' LIMIT 1);
if(mysql_num_rows($query)>0)
{
print_r(mysql_fetch_assoc($query));
}
else
{
//Other code.
}
谢谢。
编辑
我知道您在计算结果集之前在语句上使用了fetchAll()(这给了我我需要的东西),但我只是想找出最有效的做事方式。
【问题讨论】: