3

場合によっては、テーブルにいくつかの null 値を挿入するか、値を NULL に設定して更新する必要があります。

Postgres のドキュメントのどこかで、これは実行できないが、デフォルト値でだまされる可能性があることを読みました。

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

この例では、次の場合と同じ結果になることがわかっています。

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

しかし、準備されたステートメントには問題があります。

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.

同じ問題が update ステートメントにも当てはまります。

pgmyadminはそれを行うことができる(またはできるように見える)ため、解決策があると思います。

テーブルで null 値を使用する必要がある理由を知りたい場合は、例を挙げてみましょう (null 値よりも優れた方法があるのではないでしょうか?)。

空にすることもできますが、一意のインデックスを持つ列を持つusersテーブルがあるとします。email2 つの空のメールは等しく、一意の制約に違反しますが、2 つのNULL値は等しくなく、共存できます。

4

1 に答える 1

5

php'sリテラルNULLをパラメーターとして使用します。

pg_prepare($pgconn, 'insert_null_val', "INSERT INTO my_table (col_a, col_b) VALUES ($1, $2)");
pg_query($pgconn, 'insert_null_val', array('whatever', NULL));
于 2009-06-22T14:33:42.750 に答える