При выполнении запросов UPDATE и INSERT с использованием Zend_Db мне часто нужно устанавливать значения, равные NULL (не ''). Однако поведение по умолчанию Zend_Db :: insert () и Zend_Db :: update (), по-видимому, состоит в том, что значения, которые пусты, переводятся в пустые строки ('') и помещаются в базу данных как таковые.
Кто-нибудь знает, как реально заставить значение NULL перейти в поля, если значение пусто в php?
Попробуйте установить соответствующие поля: new Zend_Db_Expr('NULL')
Я всегда был в состоянии сделать это, используя PHP null:
$toUpdate = array('nullValue' => null, 'otherValue' => 'something'); Zend_Db::update($table, $toUpdate, $where);
Поскольку Johrn я смог сделать это с нулевым значением PHP:
$value = null; $what = array($columnName => $value); $where = $this->_dbTableName->getAdapter()->quoteInto('Id = ?', $dbRecord->Id); $this->_dbTableName->update($what, $where);
но столкнулись с ситуациями, когда в самой базе данных был установлен столбец NOT NULL, и в таких случаях значение действительно было преобразовано в любую пустую строку или в случае, если FLOATs равны 0.00. Я предполагаю, что столбец INT закончится как 0 😉
При использовании Zend 2.4.7 для тех, кто может посещать эту проблему, я смог использовать это с ответом Уильяма Ланнен , который вдохновил вас. Предполагая, что 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; } }