有很多相互矛盾的说法。在PHP中使用PDO获得行数的最佳方法是什么?在使用PDO之前,我只是简单地使用了mysql_num_rows。

fetchAll是我不想要的东西,因为我有时可能要处理大型数据集,所以不适合我使用。

你有什么建议吗?


当前回答

这篇文章是旧的,但获得行计数在php与PDO是简单的

$stmt = $db->query('SELECT * FROM table');
$row_count = $stmt->rowCount();

其他回答

看看这个链接: http://php.net/manual/en/pdostatement.rowcount.php 不建议在SELECT语句中使用rowCount() !

你可以将最好的方法合并到一行或函数中,并自动生成新的查询:

function getRowCount($q){ 
    global $db;
    return $db->query(preg_replace('/SELECT [A-Za-z,]+ FROM /i','SELECT count(*) FROM ',$q))->fetchColumn();
}

$numRows = getRowCount($query);

当你在mysql语句中使用COUNT(*)时,比如in

$q = $db->query("SELECT COUNT(*) FROM ...");

你的mysql查询已经在计算结果的数量,为什么在php中再次计数?来获得mysql的结果

$q = $db->query("SELECT COUNT(*) as counted FROM ...");
$nb = $q->fetch(PDO::FETCH_OBJ);
$nb = $nb->counted;

$nb将包含你在mysql语句中计算的整数 写起来有点长,但执行起来很快

编辑: 对不起,错误的帖子,但作为一些例子显示查询与计数在,我建议使用mysql的结果,但如果你不使用计数在sql fetchAll()是有效的,如果你保存在一个变量的结果,你不会失去一行。

$data = $dbh->query("SELECT * FROM ...");
$table = $data->fetchAll(PDO::FETCH_OBJ);

Count ($table)将返回行数,您仍然可以使用像$row = $table[0]或使用foreach后的结果

foreach($table as $row){
  print $row->id;
}

最后我用了这个:

$result = $db->query($query)->fetchAll();

if (count($result) > 0) {
    foreach ($result as $row) {
        echo $row['blah'] . '<br />';
    }
} else {
    echo "<p>Nothing matched your query.</p>";
}

这篇文章是旧的,但获得行计数在php与PDO是简单的

$stmt = $db->query('SELECT * FROM table');
$row_count = $stmt->rowCount();