J'ai une déclaration MySQL qui insère des variables dans la base de données. J'ai récemment ajouté 2 champs optionnels ($ intLat, $ intLng). À l'heure actuelle, si ces valeurs ne sont pas entrées, je transmets une chaîne vide en tant que valeur. Comment passer une valeur NULL explicite à MySQL (si vide)?
$query = "INSERT INTO data (notes, id, filesUploaded, lat, lng, intLat, intLng)
VALUES ('$notes', '$id', TRIM('$imageUploaded'), '$lat', '$long',
'$intLat', '$intLng')";
mysql_query($query);
Pour passer un NULL à MySQL, c'est ce que vous faites.
INSERT INTO table (field,field2) VALUES (NULL,3)
Donc, dans votre code, vérifiez if $intLat, $intLng
sont empty
, s’ils le sont, utilisez NULL
au lieu de '$intLat'
ou '$intLng'
.
$intLat = !empty($intLat) ? "'$intLat'" : "NULL";
$intLng = !empty($intLng) ? "'$intLng'" : "NULL";
$query = "INSERT INTO data (notes, id, filesUploaded, lat, lng, intLat, intLng)
VALUES ('$notes', '$id', TRIM('$imageUploaded'), '$lat', '$long',
$intLat, $intLng)";
Si vous ne transmettez pas de valeurs, vous obtiendrez des valeurs NULL pour les valeurs par défaut.
Mais vous pouvez simplement passer le mot NULL sans guillemets.
Cela fonctionne très bien pour moi:
INSERT INTO table VALUES ('', NULLIF('$date',''))
(première ''
incrémente le champ id)
Tout ce que tu dois faire est: $variable =NULL;
// et transmettez-le à la requête d'insertion. Cela va stocker la valeur comme NULL dans mysql db
Normalement, vous ajoutez des valeurs régulières à mySQL, à partir de PHP comme ceci:
function addValues($val1, $val2) {
db_open(); // just some code ot open the DB
$query = "INSERT INTO uradmonitor (db_value1, db_value2) VALUES ('$val1', '$val2')";
$result = mysql_query($query);
db_close(); // just some code to close the DB
}
Lorsque vos valeurs sont vides/nulles ($ val1 == "" ou $ val1 == NULL) et que vous souhaitez que NULL soit ajouté à SQL et non à 0 ou à une chaîne vide, aux éléments suivants:
function addValues($val1, $val2) {
db_open(); // just some code ot open the DB
$query = "INSERT INTO uradmonitor (db_value1, db_value2) VALUES (".
(($val1=='')?"NULL":("'".$val1."'")) . ", ".
(($val2=='')?"NULL":("'".$val2."'")) .
")";
$result = mysql_query($query);
db_close(); // just some code to close the DB
}
Notez que null doit être ajouté comme "NULL" et non comme "'NULL" ". Les valeurs non NULL doivent être ajoutées en tant que "'". $ Val1. "'", Etc.
J'espère que cela m'aidera. Je devais simplement l'utiliser pour certains enregistreurs de données matérielles, dont certains captaient la température et les radiations, d'autres uniquement des radiations. Pour ceux sans capteur de température, j'avais besoin de NULL et non de 0, pour des raisons évidentes (0 est également une valeur de température acceptée).
votre requête peut aller comme suit:
$query = "INSERT INTO data (notes, id, filesUploaded, lat, lng, intLat, intLng)
VALUES ('$notes', '$id', TRIM('$imageUploaded'), '$lat', '$lng', '" . ($lat == '')?NULL:$lat . "', '" . ($long == '')?NULL:$long . "')";
mysql_query($query);
Pour une raison quelconque, la solution de radhoo ne fonctionnerait pas pour moi. Quand j'ai utilisé l'expression suivante:
$query = "INSERT INTO uradmonitor (db_value1, db_value2) VALUES (".
(($val1=='')?"NULL":("'".$val1."'")) . ", ".
(($val2=='')?"NULL":("'".$val2."'")) .
")";
'null' (avec guillemets) a été inséré au lieu de null sans guillemets, ce qui en fait une chaîne au lieu d'un entier. Alors j'ai finalement essayé:
$query = "INSERT INTO uradmonitor (db_value1, db_value2) VALUES (".
(($val1=='')? :("'".$val1."'")) . ", ".
(($val2=='')? :("'".$val2."'")) .
")";
Le blanc a pour résultat l'insertion correcte de la valeur NULL (sans guillemets) dans la requête.
Vérifiez les variables avant de créer la requête, si elles sont vides, remplacez-les par la chaîne NULL
vous pouvez le faire par exemple avec
UPDATE `table` SET `date`='', `newdate`=NULL WHERE id='$id'