有很多相互矛盾的说法。在PHP中使用PDO获得行数的最佳方法是什么?在使用PDO之前,我只是简单地使用了mysql_num_rows。
fetchAll是我不想要的东西,因为我有时可能要处理大型数据集,所以不适合我使用。
你有什么建议吗?
有很多相互矛盾的说法。在PHP中使用PDO获得行数的最佳方法是什么?在使用PDO之前,我只是简单地使用了mysql_num_rows。
fetchAll是我不想要的东西,因为我有时可能要处理大型数据集,所以不适合我使用。
你有什么建议吗?
当前回答
你可以将最好的方法合并到一行或函数中,并自动生成新的查询:
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;
}
有一个简单的解决办法。如果你使用PDO连接到你的DB,像这样:
try {
$handler = new PDO('mysql:host=localhost;dbname=name_of_your_db', 'your_login', 'your_password');
$handler -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo $e->getMessage();
}
现在,如果你想知道你的表中有多少行,并且你有列'id'作为主键,对DB的查询将是:
$query = $handler->query("SELECT id FROM your_table_name");
最后,要获得与查询匹配的行数,可以这样写:
$amountOfRows = $query->rowCount();
或者你可以这样写:
$query = $handler ->query("SELECT COUNT(id) FROM your_table_name");
$amountOfRows = $query->rowCount();
或者,如果你想知道表'products'中有多少产品的价格在10到20之间,写这样的查询:
$query = $handler ->query("SELECT id FROM products WHERE price BETWEEN 10 AND
20");
$amountOfRows = $query->rowCount();
这太迟了,但我遇到了一个问题,我这样做:
function countAll($table){
$dbh = dbConnect();
$sql = "select * from `$table`";
$stmt = $dbh->prepare($sql);
try { $stmt->execute();}
catch(PDOException $e){echo $e->getMessage();}
return $stmt->rowCount();
这真的很简单。:)
看看这个链接: http://php.net/manual/en/pdostatement.rowcount.php 不建议在SELECT语句中使用rowCount() !
当它是mysql的问题,如何计算或获得多少行在一个表与PHP PDO我使用这个
// count total number of rows
$query = "SELECT COUNT(*) as total_rows FROM sometable";
$stmt = $con->prepare($query);
// execute query
$stmt->execute();
// get total rows
$row = $stmt->fetch(PDO::FETCH_ASSOC);
$total_rows = $row['total_rows'];
感谢Mike @ codeofaninja.com