php - insertar - nullif mysql
PHP/MySQL Insertar valores nulos (3)
Creo que necesitas presupuestos en tu {$row[''null_field'']}
, así que ''{$row[''null_field'']}''
Si no tiene las comillas, ocasionalmente terminará con una instrucción de inserción que se ve así: insert into table2 (f1, f2) values (''val1'',)
que es un error de sintaxis.
Si se trata de un campo numérico, tendrá que hacer algunas pruebas encima de él, y si no hay ningún valor en null_field, explícitamente establecerlo como nulo.
Estoy luchando con algún código PHP / MySQL. Estoy leyendo de 1 tabla, cambiando algunos campos y luego escribiendo en otra tabla, no sucede nada si la inserción y uno de los valores de la matriz es nulo cuando me gustaría insertar nulo en la base de datos (se permiten valores nulos para el campo). Se parece un poco a esto:
$results = mysql_query("select * from mytable");
while ($row = mysql_fetch_assoc($results) {
mysql_query("insert into table2 (f1, f2) values (''{$row[''string_field'']}'', {$row[''null_field'']});
}
No todas las filas tienen un valor nulo y en mi consulta hay más campos y 2 columnas que pueden ser o no nulas
Este es un ejemplo donde el uso de declaraciones preparadas realmente le ahorra algunos problemas.
En MySQL, para insertar un valor nulo, debe especificarlo en la hora de inserción o dejar el campo afuera que requiere una bifurcación adicional:
INSERT INTO table2 (f1, f2)
VALUES (''String Value'', NULL);
Sin embargo, si desea insertar un valor en ese campo, ahora debe bifurcar su código para agregar las comillas simples:
INSERT INTO table2 (f1, f2)
VALUES (''String Value'', ''String Value'');
Las declaraciones preparadas automáticamente hacen eso por usted. Conocen la diferencia entre string(0) ""
y null
y escriben su consulta de manera apropiada:
$stmt = $mysqli->prepare("INSERT INTO table2 (f1, f2) VALUES (?, ?)");
$stmt->bind_param(''ss'', $field1, $field2);
$field1 = "String Value";
$field2 = null;
$stmt->execute();
Se escapa de sus campos por usted, se asegura de que no se olvide de vincular un parámetro. No hay ninguna razón para quedarse con la extensión mysql
. Usa mysqli
y es, en su lugar, declaraciones preparadas . Te ahorrarás un mundo de dolor.
Para los campos donde NULL
es aceptable, puede usar var_export($var, true)
para generar la string
, integer
o literal NULL
. Tenga en cuenta que no rodeará el resultado con comillas porque se agregarán u omitirán automáticamente.
Por ejemplo:
mysql_query("insert into table2 (f1, f2) values (''{$row[''string_field'']}'', ".var_export($row[''null_field''], true).")");