vacios nullif insertar campos php mysql insert null

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