74 votes

MySQL et PHP - insérez NULL plutôt qu'une chaîne vide

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);
 

125voto

Rocket Hazmat Points 87407

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 si $ intLat, $ intLng sont vides, 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)";
 

14voto

le dorfier Points 27267

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.

3voto

radhoo Points 1185

Normalement, vous ajoutez régulièrement des valeurs à mySQL, 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
}

Quand vos valeurs sont vides/null ($val1=="" or $val1==NULL), et que vous voulez NULL pour être ajouté à SQL et pas 0 ou chaîne vide, à la suivante:

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 la valeur null doit être ajouté en tant que "NULL" et non comme "NULLE" . Les valeurs non null doit être ajouté en tant que "'".$val1."'", etc.

Espérons que cela aide, j'ai juste eu à l'utiliser pour certains matériels enregistreurs de données, certains d'entre eux de la collecte de la température et de rayonnement, d'autres seulement des rayons. Pour ceux qui ne le capteur de température, j'ai besoin de NULL et non pas 0, pour des raisons évidentes ( 0 est la valeur de température aussi).

2voto

sikas Points 1577

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);
 

1voto

profitphp Points 4883

Vérifiez les variables avant de créer la requête, si elles sont vides, remplacez-les par la chaîne NULL

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X