PDO SUM查询正常,添加WHERE参数后返回0的问题
问题解决:PDO统计指定ID的debit总和返回0的问题
核心问题:字段名错误
你的SQL语句中使用了rfid=:id作为查询条件,但数据库表的列名是id而非rfid,导致WHERE条件无法匹配任何记录,SUM(debit)返回NULL,经过floatval()转换后得到0。
修正后的代码:
$stmt = $DB_con->prepare("SELECT SUM(debit) AS balance FROM pay WHERE id=:id"); $stmt->execute([":id" => $_GET['id']]); $result = $stmt->fetch(PDO::FETCH_ASSOC); // 处理无匹配记录的情况,避免NULL转成0的歧义 $balance = isset($result['balance']) && $result['balance'] !== null ? floatval($result['balance']) : 0.0; var_dump($balance);
其他可能的排查方向
如果修正字段名后仍有问题,可以检查以下几点:
- 参数值格式问题:确保
$_GET['id']的实际值和数据库中id字段的格式一致,比如是否带额外空格、字符,可通过trim($_GET['id'])过滤后再传入。 - 字段类型不匹配:如果数据库中
id是字符串类型(如CHAR/VARCHAR),可以明确指定参数绑定类型:$id = trim($_GET['id']); $stmt = $DB_con->prepare("SELECT SUM(debit) AS balance FROM pay WHERE id=:id"); $stmt->bindParam(':id', $id, PDO::PARAM_STR); $stmt->execute(); - 开启PDO错误提示:排查是否有SQL语法或执行错误,在PDO初始化时开启错误模式:
$DB_con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
内容的提问来源于stack exchange,提问作者Chester
相关产品推荐
相关产品推荐

