Postgresql: à l'aide de 'NULL' valeur lors de l'insertion et de mise à jour des lignes avec des requêtes préparées

parfois j'ai besoin d'insérer dans la table des valeurs null, ou de mettre à jour le réglage de la valeur NULL.

J'ai lu quelque part dans la documentation postgresql que ce ne peut pas être fait, mais peut être tricket avec la valeur par défaut:

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

p.s: je sais que dans cet exemple, je vais avoir le même résultat avec

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

Mais le problèmes vient avec les requêtes préparées:

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.

Le même problème vient de la requête de mise à jour.

Je pense qu'il y a une solution, becose pgmyadmin peut le faire (ou sembler comme il peut), et est écrit, je le php (je ne pense pas que cela ne marche pas à utiliser les requêtes préparées de toute façon)

Si vous vous demandez pourquoi j'ai besoin de paly avec des valeurs null dans mes tables, laissez-moi jeter un exemple (peut-être qu'il est un moyen de mieux alors la valeur null): supposons que j'ai la table utilisateur, et l'e-mail col: celui-ci peut être vide, mais il est un index unique.. 2 mail vide sont l'égalité des et viole la contrainte unique, tandis que 2 NULL valeurs ne sont pas identiques et peuvent coexister.

OriginalL'auteur Strae | 2009-06-22