2009-06-22 75 views
3

有时我需要在表中插入一些空值或更新它们,将值设置为NULL。Postgresql:在使用预处理语句插入和更新行时使用'NULL'值

我PostgreSQL文档,这不能做在其他地方见过,但可以tricket使用默认值:

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

PS:我知道,在这个例子中我将有与

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

但问题同样的结果来witht预处理语句:

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. 

更新查询出现同样的问题。

我觉得这是一个解决方案,becose pgmyadmin可以做到这一点(或看起来像它可以),并写入我的PHP(我不认为它不使用准备好的语句反正)

如果youre想知道我为什么需要在我的表中添加空值,让我举一个例子(也许有更好的方法来处理空值):假设我有用户表和email col:这个可以是空的,但是是唯一的索引.. 2空电子邮件地址是等于并违反了唯一约束,而2个值不相等且可以共存。

回答

5

使用php的字面NULL作为参数:

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)); 
+1

我是一个白痴 - 为什么我没有想到呢? – Strae 2009-06-22 14:34:59

相关问题