2009-06-22 62 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