2009-06-22 7 views
3

manchmal muss ich in die Tabelle einige Nullwerte einfügen, oder sie aktualisieren, indem Sie den Wert auf NULL setzen.Postgresql: mit 'NULL' -Wert beim Einfügen und Aktualisieren von Zeilen mit vorbereiteten Anweisungen

Ich habe irgendwo in der PostgreSQL-Dokumentation lesen, dass dies getan werden kann nicht, aber tricket mit dem Standardwert sein kann:

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

ps: ich weiß, dass in diesem Beispiel werde ich habe die gleiches Ergebnis mit

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

Aber den Problemen kommt abgesprochen die vorbereiteten Aussagen:

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. 

Das gleiche Problem kommt mit der Update-Abfrage.

Ich denke, es gibt eine Lösung, becose pgmyadmin das tun können (oder scheinen, wie das möglich ist), und geschrieben i PHP (ich glaube nicht, es vorbereiteten Anweisungen sowieso verwenden tut)

Wenn youre fragen, warum ich Ich muss mit null Werten in meinen Tabellen palyieren, lassen Sie mich ein Beispiel werfen (vielleicht gibt es einen Weg besser als der Nullwert): Angenommen, ich habe die Benutzertabelle und die E-Mail-Spalte: Diese kann leer sein, ist aber ein Unikat Index .. 2 leere E-Mail sind gleich und verletzt die eindeutige Einschränkung, während 2 NULL Werte sind nicht gleich und koexistieren können.

Antwort

5

Verwenden Sie die php ‚s wörtlichen NULL als Parameter:

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

Ich bin ein Idiot - warum ich nicht glaube, darüber? – Strae

+1

Vielleicht sind Sie überlastet oder gestresst. Kein Wunder, wenn Sie mit PgSQL arbeiten. – analytik

+3

Oh, das war unverdient ... es ist kein Fehler von PgSQL, dass es den Verstand des Entwicklers nicht lesen kann und "null" anstelle von "null" einfügen kann. Darüber hinaus verursachte PgSQL aus eigener Erfahrung weniger Probleme als jedes andere RDBMS, mit dem ich gearbeitet habe: MSSQL, MySQL, Oracle, Derby, SQLite, um nur einige zu nennen ... –

Verwandte Themen