Postgresql: usando il valore 'NULL' quando si inseriscono e si aggiornano le righe con istruzioni preparate

StackOverflow https://stackoverflow.com/questions/1027499

Domanda

a volte ho bisogno di inserire nella tabella alcuni valori nulli o aggiornarli impostando il valore su NULL.

Ho letto da qualche parte nella documentazione di postgresql che questo non può essere fatto, ma può essere tricket con il valore predefinito:

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

p.s: so che in questo esempio avrò lo stesso risultato con

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

Ma i problemi arrivano con le dichiarazioni preparate:

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.

Lo stesso problema si presenta con la query di aggiornamento.

Penso che ci sia una soluzione, perché pgmyadmin può farlo (o sembra che possa farlo), ed è scritto in php (non credo che non usi comunque le dichiarazioni preparate)

Se ti stai chiedendo perché ho bisogno di paly con valori null nelle mie tabelle, lasciami fare un esempio (forse c'è un modo migliore del valore null): supponi di avere la tabella utente e l'e-mail col: questa può essere vuoto, ma è un indice univoco. 2 e-mail vuote sono uguali e violano il vincolo univoco, mentre 2 valori NULL non sono uguali e possono coesistere.

È stato utile?

Soluzione

Utilizza il NULL letterale del php come parametro:

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));
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top