今の仕事で、PHPでの開発をしている。DBはPostgreSQLでPDOで接続している。
SQLを書くときは「?」を使ったパラメータクエリーを使っていて、bindValueで値をセットしている。
この時に、INTEGERのカラムに対して空文字列をセットするとエラーになる。この場合、NULLをセットすれば問題がなくなる。
最初は全くわからなかった。SQL文をpsqlで実行しても大丈夫だし、今まで正常に動いていたSQLだ。テーブルは確かに数値項目で定義しているのだが、NOT NULL制約はつけていない。
Google先生に対して、
postgresql 「エラーメッセージ」
と質問してとあるブログ記事にたどり着いて原因がわかり、対処した。それまで全くわからなかった。
bindValueでセットしていたのは$_POSTで渡ってきた変数なので、別な変数に代入して空だったらNULLに置換した。下記参照。
$param = $_POST[‘param’] == “” ? NULL : $_POST[‘param’];
以上。
コメント