Pregunta

Me tiene declaración MySQL que inserta algunas variables en la base de datos. Recientemente he añadido 2 campos que son opcionales ($ intLat, $ intLng). En este momento, si no se introducen estos valores que pase a lo largo de una cadena vacía como un valor. ¿Cómo puedo pasar un valor NULL explícita a MySQL (si está vacío)?

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

Solución

Para pasar un valor NULL a MySQL, a hacer precisamente eso.

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

Por lo tanto, en su código, cheque if $intLat, $intLng son empty, si lo son, el uso 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)";

Otros consejos

Si no pasa valores, obtendrá nulos para valores por defecto.

Sin embargo, sólo puede pasar la palabra NULL sin comillas.

Esto funciona muy bien para mí:

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

(primera campo id incrementos '')

Todo lo que tiene 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

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 lo 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 añadirse como "NULO" y no como "NULO". Los valores no nulos deben ser añadidos como " '". $ Val1. "'", Etc.

Espero que esto ayude, sólo tenía que usar esto para algunos registradores de datos de hardware, algunos de ellos recogiendo la temperatura y la radiación, otros sólo la radiación. Para aquellos sin el sensor de temperatura que necesitaba NULL y no 0, por razones obvias (0 es un valor de temperatura aceptada también).

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

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

Puede hacerlo, por ejemplo, con

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

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

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

'nulo' (con comillas) se insertó 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."'")) . 
    ")";
  

La pieza en bruto dio como resultado la nula correcta (no indicada) que se inserta en la consulta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top