先日、PHPでデータベースを操作するプログラムを作っていた際、PDOでINSERT文を実行したときにハマったところがあったのでメモしておく。
$dsn = // DB接続情報
$pdo = new PDO($dsn);
$query = 'INSERT INTO tbl_hoge(flg) VALUES(:flg)';
$stmt = $pdo->prepare($query);
$stmt->execute(array(':flg' => FALSE));
上記はPDOのプリペアドステートメントを利用してINSERT文を実行する例だが、この場合エラーとなる。
原因は7行目で、FALSEをPHPのbool値として設定していることだ。
正しくはこの場合、以下のようにFALSEを文字列として設定しなければならない。
$stmt->execute(array(':flg' => 'FALSE'));
なお、TRUEの場合はどういうわけか、文字列にしなくてもエラーは発生しない。