2009-07-23 18 views
5

Podczas wykonywania kwerend UPDATE i INSERT przy użyciu Zend_Db, często trzeba ustawić wartości równe NULL (nie ""). Jednak domyślne zachowanie Zend_Db :: insert() i Zend_Db :: update() wydaje się, że wartości, które są puste, są tłumaczone na puste ciągi ("') i umieszczane w bazie danych jako takie.Jak ustawić wartość na wartość NULL podczas korzystania z Zend_Db

Czy ktoś wie, jak wymusić wartość NULL, aby przejść do pól, jeśli wartość jest pusta w php?

Odpowiedz

19

Spróbuj ustawić dotkniętych pól: new Zend_Db_Expr('NULL')

+1

lubię tę metodę _abstraction_ że ta metoda daje wam –

4

Zawsze tylko był w stanie to zrobić przy użyciu PHP NULL:

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

Jak Johrn udało mi się to zrobić z zerową PHP wartość:

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

ale napotkane sytuacje, w których sama baza danych ustawiła kolumnę na NOT NULL iw takim c wartość została faktycznie przekształcona na pusty ciąg lub w przypadku FLOAT na 0,00. Domyślam się, że kolumna INT kończyłaby się jako 0 ;-)

0

Podczas korzystania z Zend 2.4.7 dla tych, którzy mogą odwiedzać ten problem, udało mi się użyć tego z odpowiedzią William Lannen, dostarczając pewną inspirację. Zakładając getTable() Zwraca Zend\Db\TableGateway obiektu:

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; 
    } 
} 
Powiązane problemy