2009-07-23 66 views
5

使用Zend_Db执行UPDATE和INSERT查询时,我经常需要将值设置为NULL(不是'')。然而,Zend_Db :: insert()和Zend_Db :: update()的默认行为似乎是将空值转换为空字符串('')并放入数据库中。如何在使用Zend_Db时将值设置为NULL

有没有人知道的方法来实际强制NULL值进入字段,如果值为空的PHP?

回答

19

尝试将受影响的字段设置为:new Zend_Db_Expr('NULL')

+1

我喜欢的_abstraction_这种方法,这种方法给你 – 2009-07-24 02:14:29

4

我一直只是能做到这一点使用PHP的空值:

$toUpdate = array('nullValue' => null, 'otherValue' => 'something'); 
Zend_Db::update($table, $toUpdate, $where); 
1

由于Johrn我可以用PHP的空做到这一点值:

$value = null; 
$what = array($columnName => $value); 
$where = $this->_dbTableName->getAdapter()->quoteInto('Id = ?', $dbRecord->Id); 
$this->_dbTableName->update($what, $where); 

但遇到数据库本身将列设置为NOT NULL的情况,并且在这样的c ases的值确实转换为空字符串或在FLOAT的情况下为0.00。我猜INT列最终会成为0 ;-)

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; 
    } 
} 
相关问题