MariaDB / PHP 8 / PDO --> 结果集中的 null 值将作为空字符串返回

问题描述 投票:0回答:1

在命令行上使用 MariaDB 时,使用 sum() 进行选择查询的结果是空值,但在表中找不到任何匹配的行。这是预期的:

MariaDB [test]> SELECT sum(turnover) as turnover FROM turnover where date >= 20301201000000;
+---------------------+
| turnover            |
+---------------------+
|                NULL |
+---------------------+
1 row in set (0,001 sec)

不幸的是,当我通过 PHP8/PDO 执行此查询时,我得到一个空字符串:

var_dump 的输出:

array(1) {
  [0]=>
  array(1) {
    ["turnover"]=>
    string(0) ""
  }
}

我已经明确关闭了 PDO::ATTR_STRINGIFY_FETCHES,但这没有帮助:

$dsn = 'mysql:host=' . $server . ';dbname=' . $dbname . ";charset=utf8";
        
$options = [PDO::ATTR_PERSISTENT => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_ORACLE_NULLS => PDO::NULL_TO_STRING, PDO::ATTR_STRINGIFY_FETCHES => false];
            
$dbh = new PDO($dsn, $user, $pass, $options);
$dbh->exec("set names utf8");

$query = "SELECT sum(turnover) as turnover FROM turnover where date >= 20301201000000;"
$stmt = $dbh->prepare($query);
$stmt->execute();
$resultset = $stmt->fetchAll(PDO::FETCH_ASSOC);

print_r($resultset);

这会导致 PHP8 中出现问题,因为它会在我对该值执行的后续计算中引发致命错误:

PHP 致命错误:未捕获类型错误:不支持的操作数类型:字符串/整数

PHP版本:php-8.3.15 MariaDB 版本:10.11.6

如何更改此行为以使 null 值返回为 null?

php pdo mariadb
1个回答
0
投票

我需要更改 PDO 的选项:

PDO::ATTR_ORACLE_NULLS => PDO::NULL_TO_STRING

应改为:

PDO::ATTR_ORACLE_NULLS => PDO::NULL_NATURAL

我不确定为什么要这样设置,我希望它不会对应用程序的其他部分产生副作用,但它解决了我问的问题。

© www.soinside.com 2019 - 2024. All rights reserved.