1

データベースに 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 値ではなく空の文字列になってしまう理由を理解しようとしていますか? 私は何か間違ったことをしていますか、それともこれが機能するはずの方法ですか?

4

2 に答える 2

1

PDO は、ネイティブの MySQL データ型を自動的に取得しません。これを行うには、準備済みステートメントを使用し、PHP 5.3 を実行している必要があります (使用しているバージョンの PHP 5.3 が (古い libmysql ではなく) mysqlnd でコンパイルされている場合)。

また、次のように接続を確立する必要があります。

$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を実行するか、 を使用して値が null かどうかを確認する必要がありますis_null

于 2013-08-24T21:07:28.450 に答える
1

これを試して:

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

PDO::NULL_NATURAL:無変換。

于 2013-08-24T21:52:20.293 に答える