使用Zend_Db将TIME字段设置为NULL

时间:2012-04-28 19:49:27

标签: mysql zend-framework pdo zend-db

我遇到了Zend_Db或PHP的PDO MySQL驱动程序的奇怪问题,这可能源于我对这两者缺乏了解。

假设我有一个带有NULLTIME字段的MySQL表。如果我在MySQL客户端中运行这样的查询:

UPDATE mytable SET mytime = NULL WHERE id = 1;

所有内容均按预期工作, mytime 字段将在此查询后保留NULL作为值。

但是,如果我通过Zend_Db_Adapter在PHP中运行完全相同的查询,则 mytime 字段在此类查询后设置为'0:0:0'

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

如何将TIME字段设置为NULL?

我正在使用PHP5.3和PDO MySQL驱动程序,Zend Framework 1.11和MySQL 5.1。

2 个答案:

答案 0 :(得分:1)

你应该工作,即:

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

那应该有用。我测试了它。

买者

如果数据类型时间NOT NULL,则尝试将其设置为NULL会导致值NULL默认为00:00:00 },这可能是意外行为,例如:

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

尝试使用NULL插入或更新上方的时间字段会导致插入值00:00:00

这与日期,日期时间和其他一些数据类型类似。例如尝试将数据类型日期时间设置为NOT NULL NULL,其值将默认为0000-00-00 00:00:00

注意:当您尝试将NULL值设置为NUT NULL数据类型时,Mysql不会抛出错误,您可以通过将MySQL的SQL_MODE设置为{}来更改此行为STRICT_ALL_TABLES:请参阅this stackoverflow question

修复

更改字段以允许NULL,它应该没问题:

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

现在时间字段可以设置为NULL

答案 1 :(得分: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");