2015-12-31 39 views
0

我目前查询数据库两次来找回我的结果集,我的结果的行数设置之前我运行的行环回这样的:PHP PDO - 检索结果和行数 - 便携式解决方案

$result = $db->query("SELECT COUNT(*) FROM mytable"); 
$result1 = $db->query("SELECT * FROM mytable"); 

$count = $result->fetchColumn(); 

if($count == $value){ 

while($row = $result1->fetch(PDO::FETCH_ASSOC)){ 
//execute code 
    } 
} elseif($count == $value2) { 
//execute other code 
} 

我刚刚转换为PDO,所以不知道它。代码用于使用mysql_num_rows。我正在寻找一种方法,可以在不查询数据库两次的情况下执行此操作,这种我一直使用的解决方案可用于小型目的,但如果数据库已缩放,则显然是不必要的数据库负载。很多谢谢

编辑:我搬到PDO的原因是它的便携性功能,因此rowCount()并不适合每一个实例。

+1

它总是阅读您使用该工具的文档是个好主意。例如,它向您显示可用方法的列表。在这里它显示你这个:http://php.net/manual/en/pdostatement.rowcount.php – arkascha

+1

['rowCount'](http://php.net/manual/en/pdostatement.rowcount.php)可能你在找什么。 – Script47

+1

@ Script47'rowCount'不在'SELECT'语句上执行。 – Ohgodwhy

回答

1

您可以使用rowCount()方法获取的行数,像这样:

$result = $db->query("SELECT * FROM mytable"); 
$count = $result->rowCount(); 

echo $count; 

while($row = $result->fetch(PDO::FETCH_ASSOC)){ 

    // your code 

} 

这里的参考:

编辑:

如果你不想使用rowCount()方法,这是另一种方法。

$result = $db->query("SELECT * FROM mytable"); 
$result_set = $result->fetchAll(); 
$count = count($result_set); 

echo $count; 

while($row = array_shift($result_set)){ 

    // your code 

} 

下面是相关参考文献:

+0

道歉,这只是一个打字错误,不是实际代码的副本/ pase,并且不回答我问的问题。尽管如此,我现在已经编辑过。 –

+0

@AdamCopley我已经更新了我的答案。 –

+0

应该注意的是rowCount()不能保证适用于跨所有平台的SELECT查询! –

0

在你的情况下,没有理由执行COUNT(*)查询。您可以统计返回的行数。

$count = $result->fetchAll(); 

现在$count持有参照多少行返回。

+0

这个答案不起作用,而'$ result-> rowCount();'做。 –

+0

@AdamCopley我的解决方案不适合你吗? – Ohgodwhy

+0

可以肯定的是,不过你省略了Rajdeep Paul提供的重要'count($ result)',因此是我的问题的第一个工作解决方案。非常感谢您的回答。 –