先日、PDOを使ってPostgreSQLにデータを書き込む処理を書いていたところ、INSERT文を実行した時に以下のエラーが発生した。
Fatal error: Cannot pass parameter 2 by reference
問題のコードがこちら。
$sql = "INSERT INTO table_name (name) VALUES (:param)";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':param', 'value');
PDOのプリペアドステートメントを使った単純な処理だが、4行目のbindParamの第2引数に値を直接入れてしまっていることがエラーの原因のようだ。
第2引数には変数を入れる必要がある。
先ほどのコードを修正。
$sql = "INSERT INTO table_name (name) VALUES (:param)";
$stmt = $pdo->prepare($sql);
$value = 'value';
$stmt->bindParam(':param', $value);
一度値を変数化してからbindParamに設定することで、今回のエラーは解消する。