如果我的数据库中有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值?我做错了什么,或者这是应该的方式吗?
答案 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
:没有转化。