先日、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の場合はどういうわけか、文字列にしなくてもエラーは発生しない。