在使用 Zend_Db 执行 UPDATE 和 INSERT 查询时,我经常需要将值设置为 NULL(而不是 '')。然而,Zend_Db::insert() 和 Zend_Db::update() 的默认行为似乎是将空值转换为空字符串 ('') 并照此输入数据库。
如果php中的值为空,有谁知道实际强制NULL值进入字段的方法?
在使用 Zend_Db 执行 UPDATE 和 INSERT 查询时,我经常需要将值设置为 NULL(而不是 '')。然而,Zend_Db::insert() 和 Zend_Db::update() 的默认行为似乎是将空值转换为空字符串 ('') 并照此输入数据库。
如果php中的值为空,有谁知道实际强制NULL值进入字段的方法?
尝试将受影响的字段设置为:new Zend_Db_Expr('NULL')
我总是能够使用 PHP 的 null 来做到这一点:
$toUpdate = array('nullValue' => null, 'otherValue' => 'something');
Zend_Db::update($table, $toUpdate, $where);
作为 Johrn,我可以使用 PHP 的 null 值来做到这一点:
$value = null;
$what = array($columnName => $value);
$where = $this->_dbTableName->getAdapter()->quoteInto('Id = ?', $dbRecord->Id);
$this->_dbTableName->update($what, $where);
但是遇到了数据库本身将列设置为 NOT NULL 的情况,在这种情况下,该值确实被转换为空字符串,或者在 FLOAT 的情况下转换为 0.00。我猜 INT 列最终会为 0 ;-)
在为可能访问此问题的人使用 Zend 2.4.7 时,我能够将其与William Lannen的回答一起使用,提供一些灵感。假设getTable()
返回一个Zend\Db\TableGateway
对象:
public function fetch()
{
$data['column_name1 = ?'] = 'column_value';
$data[] = new \Zend\Db\Sql\Predicate\IsNull('column_name2');
$resultSet = $this->getTable()->select($data);
if (0 === count($resultSet) {
return 'SomeExpectationOrException';
} else {
return $resultSet;
}
}