使用Zend_Db执行UPDATE和INSERT查询时,我经常需要设置等于NULL的值(不是'')。但是,Zend_Db :: insert()和Zend_Db :: update()的默认行为似乎是将空值转换为空字符串('')并将其放入数据库中。
如果php中的值为空,有没有人知道实际强制NULL值进入字段的方法?
答案 0 :(得分:22)
尝试将受影响的字段设置为: new Zend_Db_Expr('NULL')
答案 1 :(得分:4)
我总是能够使用PHP的null来做到这一点:
$toUpdate = array('nullValue' => null, 'otherValue' => 'something');
Zend_Db::update($table, $toUpdate, $where);
答案 2 :(得分:2)
正如Johrn我能用PHP的空值来做到这一点:
$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; - )
答案 3 :(得分: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;
}
}