Pregunta

a veces necesito insertar en la tabla algunos valores nulos, o actualizarlos estableciendo el valor en NULL.

He leído en algún lugar de la documentación de postgresql que esto no se puede hacer, pero puede ser tricket con el valor predeterminado:

pg_query("INSERT INTO my_table (col_a, col_b) VALUES ('whatever', default)

p.s: sé que en este ejemplo tendré el mismo resultado con

pg_query("INSERT INTO my_table (col_a) VALUES ('whatever')

Pero los problemas vienen con las declaraciones preparadas:

pg_prepare($pgconn, 'insert_null_val', "INSERT INTO my_table (col_a, col_b) VALUES ($1, default)");
pg_exec($pgconn, 'insert_null_val', array('whatever'));
//this works, but
pg_prepare($pgconn, 'insert_null_val', "INSERT INTO my_table (col_a, col_b) VALUES ($1, $2)");
pg_exec($pgconn, 'insert_null_val', array('whatever', 'NULL'));
//insert into the table the string 'NULL'.
//instead using array('whatever', '') it assume the col_b as empty value, not NULL.

El mismo problema viene con la consulta de actualización.

Creo que hay una solución, becose pgmyadmin puede hacer eso (o parece que puede), y está escrito en i php (no creo que de todos modos no use las declaraciones preparadas)

Si se está preguntando por qué necesito usar valores nulos en mis tablas, déjeme dar un ejemplo (tal vez haya una forma mejor que el valor nulo): suponga que tengo la tabla de usuario y la columna de correo electrónico: esta puede estar vacío, pero es un índice único. 2 correos electrónicos vacíos son iguales y violan la restricción única, mientras que 2 valores NULL no son iguales y pueden coexistir.

¿Fue útil?

Solución

Utilice el php literal NULL como parámetro:

pg_prepare($pgconn, 'insert_null_val', "INSERT INTO my_table (col_a, col_b) VALUES ($1, $2)");
pg_exec($pgconn, 'insert_null_val', array('whatever', NULL));
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top