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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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