MySQL y PHP - NULL inserto en lugar de cadena vacía
-
30-09-2019 - |
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);
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.