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