2009-11-13 12 views
7

J'utilise Zend Framework avec MySQL, Apache et Ubuntu 9.04.Zend: Comment insérer des valeurs NULL dans MySQL

Je suis en train d'insérer des valeurs NULL dans la base de données comme ceci:

$personObj->setPersonId('1'); 
$personObj->setPersonEmail('NULL'); 
$personObj->save(); 

Mais « NULL » est stocké dans la base de données sous forme de chaîne et non NULL.

Quand j'utilise ceci:

$personObj->setPersonId('1'); 
$personObj->setPersonEmail(NULL); 
$personObj->save(); 

Mais rien ne se passe et l'entrée précédente est inchangée.

Que dois-je faire pour insérer des valeurs NULL dans MySQL?

+0

Sans guillemets simples? –

+0

Lorsque j'utilise $ personObj-> setPersonEmail ('NULL'); Il insère NULL en tant que chaîne. Quand j'utilise $ personObj-> setPersonEmail (NULL); l'entrée précédente est inchangée et rien ne se passe. – NAVEED

+0

Quel type d'objet est '$ personObj'? Comme d'autres l'ont déjà dit, sans connaître l'implémentation de 'setPersonEmail()' vous ne pouvez pas déterminer ce qui doit être passé. –

Répondre

17

Si vous n'êtes pas en train de modifier l'une des valeurs après leur sont assignées alors

new $personObj->setPersonEmail(new Zend_Db_Expr('NULL')); 
+1

oui ça marche. – NAVEED

+3

Cela a fonctionné pour moi aussi, mais je dois faire 'new Zend_Db_Expr ('NULL')' –

0

Je pense que mettre NULL entre guillemets est ce qui le fait ressembler à une chaîne.

Je ne connais pas votre méthode, mais pour une insertion directe via une commande INSERT mysql, les guillemets autour d'une valeur NULL sont incorrects.

+0

J'ai aussi essayé ce $ personObj-> setPersonEmail (NULL); Mais rien ne s'est passé. L'entrée précédente est inchangée. – NAVEED

+1

Cela dépend ** entièrement ** de la façon dont la méthode 'setPersonEmail()' fonctionne, et si elle est valide pour * mettre à jour * une entrée. – pavium

+0

Oui, il met à jour. Quand j'utilise ce $ personObj-> setPersonEmail ('[email protected] '); Il remplace l'entrée de la base de données précédente par [email protected] Mais mon problème est de supprimer l'entrée précédente et d'insérer NULL si un utilisateur supprime son adresse e-mail. – NAVEED

1

La première pensée serait passe directement dans le mot clé null, sans guillemets autour de lui. Comme le dit Pavium, les citations qui l'entourent le transforment en ficelle.

+0

J'ai essayé ce $ personObj-> setPersonEmail (null); Mais pas de chance. En fait, je suis en train de mettre à jour cette entrée. Un email existe déjà dans la base de données et je veux le supprimer et insérer NULL. – NAVEED

+0

Pourrait essayer des guillemets vides, bien que cela ferait probablement juste une chaîne vide. Avez-vous essayé d'accéder à la colonne plus directement, plutôt que via la fonction set? par exemple: $ personObj-> personEmail = null; – Tarka