2011-01-06 10 views
56

Tengo una instrucción MySQL que inserta algunas variables en la base de datos. Recientemente agregué 2 campos que son opcionales ($ intLat, $ intLng). En este momento, si no se ingresan estos valores, paso una cadena vacía como valor. ¿Cómo paso un valor NULL explícito a MySQL (si está vacío)?MySQL y PHP: inserte una cadena NULL en lugar de una cadena vacía

$query = "INSERT INTO data (notes, id, filesUploaded, lat, lng, intLat, intLng) 
      VALUES ('$notes', '$id', TRIM('$imageUploaded'), '$lat', '$long', 
        '$intLat', '$intLng')"; 
mysql_query($query); 

Respuesta

100

Para pasar un NULL a MySQL, usted simplemente hace eso.

INSERT INTO table (field,field2) VALUES (NULL,3) 

Así, en su código, marque if $intLat, $intLng son empty, si lo son, utilizan NULL en lugar de '$intLat' o '$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)"; 
+3

Esto no agrega un valor NULL MySQL (primera '' campo id incrementos). Esto establece el atributo a la cadena "NULL" que es diferente del valor NULL de mysql. Solo digo que escribiste dos cosas diferentes, la primera es correcta; la segunda, no tanto, creo. – G4bri3l

+16

@ G4bri3l: en la cadena '$ query',' $ intLat' y '$ intLng' no están entre comillas. Entonces, cuando las variables se interpolan, será ', NULL, NULL);'. –

+1

Oh, sí veo eso ahora. ¡Bonito! Gracias por tomarse el tiempo para señalarlo a mí;) – G4bri3l

10

Si no pasa los valores, obtendrá valores nulos para los valores predeterminados.

Pero puede pasar la palabra NULL sin comillas.

+7

Solo obtendrá NULL por defecto, si la tabla está configurada de esa manera. –

+2

Para mí eso es lo que significa "opcional". – dkretz

1

Comprobar las variables antes de construir la consulta, si están vacíos, ellos cambian a la cadena NULL

2

la consulta puede ser la siguiente:

$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

$ intLat y $ intLng son los opcionales. –

+0

Esto no funcionará. Hay algunas cosas malas con este fragmento de código (además de usar las variables incorrectas, como señaló Rocket). Debido a la precedencia del operador ternario, necesitará paréntesis alrededor de la expresión. Pero, lo que es más importante, todavía está rodeando el valor de la columna en comillas simples, por lo que vuelve al punto uno, asignando una cadena, no una base de datos 'NULL'. Además, está utilizando la palabra clave 'NULL' (sin comillas) de PHPs, que evalúa como una cadena vacía en un contexto de cadena, así que de nuevo, está asignando una _cadena vacía_. – MrWhite

1

se puede hacer por ejemplo con

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

Normalmente, añadir los valores regulares a mySQL, PHP de la siguiente manera:

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 
} 

Cuando los valores están vacíos/null ($ VAL1 == "" o $ val1 NULL ==), y desea NULL que se añade a SQL y no es 0 o cadena vacía, a la siguiente:

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 
} 

Tenga en cuenta que null debe agregarse como "NULL" y no como "'NULL'". Los valores no nulos se deben agregar como "'". $ Val1. "'", Etc.

Espero que esto ayude, solo tuve que usar esto para algunos registradores de datos de hardware, algunos de ellos recolectando temperatura y radiación, otros solo radiación. Para aquellos sin el sensor de temperatura, necesitaba NULL y no 0, por razones obvias (0 también es un valor de temperatura aceptado).

1

Por alguna razón, la solución de radhoo no funcionaría para mí. Cuando solía la siguiente expresión:

$query = "INSERT INTO uradmonitor (db_value1, db_value2) VALUES (". 
    (($val1=='')?"NULL":("'".$val1."'")) . ", ". 
    (($val2=='')?"NULL":("'".$val2."'")) . 
    ")"; 

'nulo' (con comillas) fue insertado en lugar de null sin comillas, lo que es una cadena en lugar de un número entero. Así que finalmente intentado:

$query = "INSERT INTO uradmonitor (db_value1, db_value2) VALUES (". 
    (($val1=='')? :("'".$val1."'")) . ", ". 
    (($val2=='')? :("'".$val2."'")) . 
    ")"; 

El blanco como resultado la correcta nula (sin comillas) que se inserta en la consulta.

5

Todo lo que tienes que hacer es: $variable =NULL; // y pasarlo en la consulta de inserción.Esto almacenará el valor como NULL en la base de datos MySQL

+0

No hay necesidad de comillas alrededor del "NULO". – Louis

4

Esto funciona muy bien para mí:

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

+1

NULLIF toma 2 parámetros 'NULLIF (expr1, expr2)'. Ver http://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html#function_nullif –

Cuestiones relacionadas