MySQL y PHP-inserta NULL en lugar de una cadena vacía
mysql null insert (9)
Tengo una declaración de 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 un valor. ¿Cómo paso un valor NULL explícito 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);
Por alguna razón, la solución de Radhoo no funcionaría para mí. Cuando utilicé la siguiente expresión:
$query = "INSERT INTO uradmonitor (db_value1, db_value2) VALUES (".
(($val1=='''')?"NULL":("''".$val1."''")) . ", ".
(($val2=='''')?"NULL":("''".$val2."''")) .
")";
''null'' (con comillas) se insertó en lugar de nulo sin comillas, por lo que es una cadena en lugar de un entero. Así que finalmente lo intenté:
$query = "INSERT INTO uradmonitor (db_value1, db_value2) VALUES (".
(($val1=='''')? :("''".$val1."''")) . ", ".
(($val2=='''')? :("''".$val2."''")) .
")";
El espacio en blanco resultó en que se insertara el nulo correcto (sin comillas) en la consulta.
Esto funciona bien para mí:
INSERT INTO table VALUES ('''', NULLIF(''$date'',''''))
(el primer ''''
incrementa el campo de identificación)
Normalmente, agregas valores regulares a mySQL, desde PHP como este:
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 sus valores están vacíos / nulos ($ val1 == "" o $ val1 == NULL), y desea que se agregue NULL a SQL y no a 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 se debe agregar 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 recogiendo 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).
Para pasar un NULL a MySQL, haz eso.
INSERT INTO table (field,field2) VALUES (NULL,3)
Entonces, en su código, verifique if $intLat, $intLng
están empty
, si están, use NULL
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)";
Si no pasa valores, obtendrá valores nulos para los valores predeterminados.
Pero solo puedes pasar la palabra NULL sin comillas.
Su consulta puede ir de la siguiente manera:
$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);
Todo lo que tienes que hacer es: $variable =NULL;
// y pasarlo en la consulta de inserción. Esto almacenará el valor como NULL en mysql db
Verifique las variables antes de construir la consulta, si están vacías, cámbielas a la cadena NULL
puedes hacerlo por ejemplo con
UPDATE `table` SET `date`='''', `newdate`=NULL WHERE id=''$id''