3

どちらかまたは PHP の PDO MySQL ドライバーで奇妙な問題のように見えるものに遭遇しましたZend_Db。これはおそらく、これら 2 つの知識が不足していることが原因です。

NULL可能なTIMEフィールドを持つ MySQL テーブルがあると仮定しましょう。MySQL クライアントで次のようなクエリを実行すると:

UPDATE mytable SET mytime = NULL WHERE id = 1;

すべてが期待どおりに機能し、このクエリの後にmytimeフィールドが値として保持されます。NULL

ただし、PHP でまったく同じクエリを実行すると、そのようなクエリのZend_Db_Adapter後にmytimeフィールドが設定され'0:0:0'ます。

$db->getConnection()->exec('UPDATE mytable SET mytime = NULL WHERE id = 1');

その TIME フィールドを NULL に設定するにはどうすればよいですか?

PDO MySQL ドライバー、Zend Framework 1.11、および MySQL 5.1 で PHP5.3 を使用しています。

4

2 に答える 2

1

あなたが持っているものはうまくいくはずです。

$db->getConnection()->exec('UPDATE mytable SET mytime = NULL WHERE id = 1');

それはうまくいくはずです。私はそれをテストしました。

警告

データ型timeがの場合NOT NULL、それを に設定しようとするNULLと、値NULLがデフォルトで に設定されます00:00:00。これは予期しない動作になる可能性があります。

CREATE TABLE `test` (
    `time` datetime NOT NULL
);

上記の時間フィールドを挿入または更新しようとNULLすると、値00:00:00が挿入されます。

これは、日付、日時、およびその他のいくつかのデータ型についても同様です。たとえば、データ型datetimeNOT NULL to NULLに設定しようとすると、デフォルト値が になります0000-00-00 00:00:00

NULL注: データ型に値を設定しようとしても、Mysql はエラーをスローしません。MySQLをに設定することで、このNUT NULL動作を変更できます。SQL_MODESTRICT_ALL_TABLES

修正

フィールドを許可するように変更するNULLと、問題ないはずです。

CREATE TABLE `test` (
    `time` datetime DEFAULT NULL
);

時間フィールドを に設定できるようになりましたNULL

于 2012-04-30T00:01:27.947 に答える
0

new Zend_Db_Expr('NULL')NULL の代わりに使用:

$zend_null = new Zend_Db_Expr('NULL');
$db->getConnection()->exec("UPDATE mytable SET mytime = $zend_null WHERE id = 1");
于 2012-04-28T20:18:34.690 に答える