Update : mettre à null un champs
Salut à tous,
j'utilise dans un projet Zend_Db_Adapter_Abstract. Lorsque je souhaite utiliser la méthode update j'ai constamment une chaine vide à la place d'une valeur null :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| public function update($bind,$where)
{
if(is_object($bind))
$bind = $this->toArray ();
$bind = $this->replaceNull($bind);
$nbRow = $this->sql->update($this->table,$bind, $where);
if($nbRow == 0) {
throw new Exception('Impossible de mettre à jour les données');
}
return true;
}
private function replaceNull($datas)
{
foreach($datas as &$data) {
if($data == NULL) {
$data = new Zend_Db_Expr('NULL');
}
}
return $datas;
} |
Comme on peux le voir je convertis les valeurs nullde $bind en Zend_Db_Expr afin d'avoir effectivement une valeur null.
Quand je dump $bind juste avant l'update j'ai bien tout ce qu'il faut :
Code:
1 2 3 4
| array(
'email' => object(Zend_Db_Expr>)
protected '_expression' => string 'NULL'
'is_admin' => int1 |
Mais lors de l'update rien n'y fait je me retrouve avec une chaine vide.
Si jamais ça peux venir de l) voici comme j'initialise mon objet :
Code:
1 2 3 4 5 6 7 8
| $options = $configIni->database->params->toArray()
+ array('driver_options' =>
array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8;',
PDO::ATTR_EMULATE_PREPARES => false,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
$sql = Zend_Db::factory($configIni->database->adapter, $options);
$sql->getConnection(); |
Et la table concerné par l'update :
Code:
1 2 3 4 5 6 7 8 9
| CREATE TABLE IF NOT EXISTS `users` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`id_account` int(10) unsigned NOT NULL,
`email` varchar(45) NOT NULL,
`pass` varchar(70) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `email_UNIQUE` (`email`),
KEY `fk_user_accounts_idx` (`id_account`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; |
Si jamais vous avez une idée ... là je sèche complètement :(