web-dev-qa-db-fra.com

MySQL et PHP - insère 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);
71
user547794

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)";
123
Rocket Hazmat

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.

13
dkretz

Cela fonctionne très bien pour moi:

INSERT INTO table VALUES ('', NULLIF('$date',''))

(première '' incrémente le champ id)

11
Jesenko Sokoljak

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

11
Shahid Sarwar

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

3
radhoo

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

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.

1
bobv

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

1
profitphp

vous pouvez le faire par exemple avec

UPDATE `table` SET `date`='', `newdate`=NULL WHERE id='$id'
1
bernte