You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于num_rows使用PDO展示内容?解析PDO与mysqli的差异

在PDO中实现基于行数展示内容的功能

确实,PDO里和行数相关的机制跟mysqli差别不小,我结合你的需求给你两种靠谱的实现方式,你可以根据场景选择:


方法一:获取结果集后统计行数(通用兼容所有数据库)

这种方法不管你用什么数据库驱动都能正常工作,是最稳妥的方案。思路是先把查询结果全部取出来,再用PHP的count()函数统计行数:

<?php
// PDO连接数据库
$dsn = 'mysql:host=127.0.0.1;dbname=mydbname;charset=utf8mb4';
$username = 'root';
$password = 'mypassword';

try {
    $pdo = new PDO($dsn, $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
    die("Sorry, could not connect: " . $e->getMessage());
}

$id = 1;
$qry = "SELECT * FROM customers WHERE id = ?";
$stmt = $pdo->prepare($qry);
// PDO绑定参数的方式,直接把参数数组传给execute更简洁
$stmt->execute([$id]);

// 获取所有结果行
$customers = $stmt->fetchAll(PDO::FETCH_ASSOC);
// 统计行数
$count = count($customers);

// 后续逻辑示例:根据行数展示内容
if ($count > 0) {
    foreach ($customers as $customer) {
        echo "客户ID:" . $customer['id'] . ",姓名:" . $customer['name'] . "<br>";
    }
} else {
    echo "没有找到匹配的客户";
}
?>

方法二:使用rowCount()(仅部分数据库支持,比如MySQL)

PDO的rowCount()方法可以直接返回受影响的行数,对于MySQL的SELECT语句,它也能返回查询到的行数,但要注意:不是所有数据库驱动都支持用rowCount()获取SELECT的结果行数(比如PostgreSQL就不行)。如果你的项目只针对MySQL,这种方法更高效(不用一次性取出所有行):

<?php
// 连接部分和上面一致,省略...

$id = 1;
$qry = "SELECT * FROM customers WHERE id = ?";
$stmt = $pdo->prepare($qry);
$stmt->execute([$id]);

// 直接获取行数
$count = $stmt->rowCount();

// 如果需要获取具体数据,再执行fetch/fetchAll
if ($count > 0) {
    $customer = $stmt->fetch(PDO::FETCH_ASSOC);
    echo "客户ID:" . $customer['id'] . ",姓名:" . $customer['name'];
} else {
    echo "没有找到匹配的客户";
}
?>

小提示

  • 如果你只是想判断有没有结果,其实不用统计行数,直接用$stmt->fetch()试试,如果返回false就是没有数据,这样更高效。
  • PDO的错误处理建议用异常模式(就是代码里的PDO::ERRMODE_EXCEPTION),比mysqli的手动判断错误更省心。

内容的提问来源于stack exchange,提问作者Hayden

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:00:55