3

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

假设我有一个带有NULLableTIME字段的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?

我将 PHP5.3 与 PDO MySQL 驱动程序、Zend Framework 1.11 和 MySQL 5.1 一起使用。

4

2 回答 2

1

你有什么应该工作,即:

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

那应该行得通。我测试了它。

警告

如果数据类型timeNOT NULL,那么尝试将其设置为NULL将导致值NULL默认为00:00:00,这可能是意外行为,例如:

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

尝试插入或更新上面的时间字段NULL将导致值00:00:00被插入。

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

NULL注意:当您尝试将值设置为数据类型时, Mysql 不会抛出错误,您可以通过将 MySQL 设置为来NUT NULL更改此行为:请参阅此 stackoverflow 问题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 回答