循环遍历结果返回NULL值的空字符串?

时间:2013-08-24 20:59:25

标签: php mysql pdo

如果我的数据库中有NULL值并将它们拉入数组,我会得到空字符串。例如:

$test = [];
while ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
    $test[$row['id']]['field1'] = $row['field1'];
    $test[$row['id']]['field2'] = $row['field2']; // null in database
    $test[$row['id']]['field3'] = null; // explicitly set to null
}
return $test;

输出:

array(1) {
  [1]=>
  array(3) {
    ["field1"]=>
    string(4) "test"
    ["field2"]=>
    string(0) ""
    ["field3"]=>
    string(0) ""
  }
}

我只是想了解为什么我最终得到空字符串而不是NULL值?我做错了什么,或者这是应该的方式吗?

2 个答案:

答案 0 :(得分:1)

PDO不会自动检索本机MySQL数据类型。为此,您必须使用预准备语句,并且必须运行PHP 5.3(前提是您的PHP 5.3版本是使用mysqlnd(而不是旧的libmysql)编译的。)

此外,您必须建立如下连接:

$conn = new PDO($dsn, $user, $pass, array(
    PDO::ATTR_EMULATE_PREPARES => false
));

PDO :: ATTR_EMULATE_PREPARES启用或禁用预先准备语句的模拟。

来源:http://php.net/manual/en/pdo.setattribute.php

要查看实际的NULL值,您需要执行var_dump或使用is_null检查该值是否为空。

答案 1 :(得分:1)

试试这个:

$db->setAttribute(PDO::ATTR_ORACLE_NULLS, PDO::NULL_NATURAL );

PDO::NULL_NATURAL:没有转化。