OVH Cloud OVH Cloud

[MySQL] NULLIF

6 réponses
Avatar
Forums wanadoo
Bonsoir,
Dans la requête suivante, je veux insérer NULL si $d[$a] est vide. A
l'execution,
aucune insertion n'a lieu quand le champ est vide. Par contre j'ai NULL
quand le champ=0.

INSERT INTO x VALUES ('$a', '$b','$c', NULLIF(".$d[$a].",' '))";

Merci de votre aide
Oman

6 réponses

Avatar
Tanguy
Il se trouve que Forums wanadoo a formulé :
INSERT INTO x VALUES ('$a', '$b','$c', NULLIF(".$d[$a].",' '))";



INSERT INTO x VALUES ('$a', '$b','$c',
NULLIF('".addslashes($d[$a])."',' '))";
Avatar
Forums wanadoo
L'ajout de addslashes n'a provoqué aucun changement.

"Tanguy" a écrit dans le message de
news:
Il se trouve que Forums wanadoo a formulé :
> INSERT INTO x VALUES ('$a', '$b','$c', NULLIF(".$d[$a].",' '))";

INSERT INTO x VALUES ('$a', '$b','$c',
NULLIF('".addslashes($d[$a])."',' '))";


Avatar
Rue des Prairies
Forums wanadoo a écrit :
Bonsoir,
Dans la requête suivante, je veux insérer NULL si $d[$a] est vide. A
l'execution,
aucune insertion n'a lieu quand le champ est vide. Par contre j'ai NULL
quand le champ=0.

INSERT INTO x VALUES ('$a', '$b','$c', NULLIF(".$d[$a].",' '))";

Merci de votre aide
Oman





Bonjour,

Selon la doc http://dev.mysql.com/doc/mysql/fr/Control_flow_functions.html

NULLIF retourne NULL ssi exp1 = exp2, dans ta requête, il y aura NULL si
$d[$a] = ' ' , je pense que tu veux $d[$a] = ''
donc :
INSERT INTO x VALUES ('$a', '$b','$c', NULLIF(".$d[$a].",''))";

Si j'ai bien compris ton problème.

Olivier.
Avatar
Forums wanadoo
Bonsoir,
j'ai bien testé sans espace à l'intérieur des guillements simples. Je
connais la doc en question et d'ailleurs je n'ai pas encore vu sur le net
l'utilisation de NULLIF avec un INSERT.
Précision : j'ai déclaré dans ma table(phpmyadmin) le champ en question :
type décimale et null possible.
Merci de vous être penché sur le problème.
Oman

Bonjour,

Selon la doc http://dev.mysql.com/doc/mysql/fr/Control_flow_functions.html

NULLIF retourne NULL ssi exp1 = exp2, dans ta requête, il y aura NULL si
$d[$a] = ' ' , je pense que tu veux $d[$a] = ''
donc :
INSERT INTO x VALUES ('$a', '$b','$c', NULLIF(".$d[$a].",''))";

Si j'ai bien compris ton problème.

Olivier.
Avatar
Rue des Prairies
Forums wanadoo a écrit :
Bonsoir,
j'ai bien testé sans espace à l'intérieur des guillements simples. Je
connais la doc en question et d'ailleurs je n'ai pas encore vu sur le net
l'utilisation de NULLIF avec un INSERT.
Précision : j'ai déclaré dans ma table(phpmyadmin) le champ en question :
type décimale et null possible.
Merci de vous être penché sur le problème.
Oman



Bizarre, ça fonctionne très bien chez moi.
Peux-tu donner plus de renseignements sur la structure de ta table et
des exemples de données ?

Olivier.
Avatar
Antoun
Forums wanadoo wrote:

Bonsoir,
Dans la requête suivante, je veux insérer NULL si $d[$a] est vide. A
l'execution,
aucune insertion n'a lieu quand le champ est vide. Par contre j'ai NULL
quand le champ=0.

INSERT INTO x VALUES ('$a', '$b','$c', NULLIF(".$d[$a].",' '))";

Merci de votre aide
Oman



si je comprends bien, $d[$a] est une variable PHP. Tu ne peux donc pas
tester son type avec MySQL !

Par ailleurs, tu sembles considérer que ' ' serait vide. Il contient un
espace, et est donc différent de la chaîne vide ''...

Je te propose la syntaxe suivante :

$sql = "INSERT INTO x VALUES ('$a', '$b','$c', "
. $d[$a] === " " ? "NULL" : $d[$a]
. ") " ;

Selon ce que tu appelles vide, tu peux utiliser l'un des tests suivants
à la place de $d[$a] === " " :

$d[$a] === ""
$d[$a] === NULL
empty($d[$a])
! $d[$a]
array_key_exists($a, $d)
etc.