bindParamとbindValueの違い[備忘録]

自分の勉強用です。

bindParamとbindValueとは

PHPで使用されるメソッド。DB管理システムの準備済みステートメントにパラメーターをバインド(結わえ付ける)する。

bindParamとbindValueの主な違いは、変数を準備済みステートメントにバインドする方法。

bindValueとは

変数の値を準備済みステートメントにバインドする。

値は、ステートメントの実行時にDBに送信されますが、変数が後で変更されても送信した値は変更されません。

後は、配列でキー指定した値をそのまま準備済みステートメントに埋め込むことが出来ます。

bindParamとは

変数への参照を準備済みステートメントにバインドします。

これは後で変数が変更された場合、ステートメントの実行時に新しい値がDBに送信されることを意味します。

bindValueとbindParamの使い分けについて

つまり、bindValueは特定の値をステートメントにバインドする際に使用され、bindParamは参照を変数にバインドする場合に使用され、後でその値を更新してDBに送信できるようになる。

 

今回でいうと、掲示板でユーザーが入力した値を$_POSTで受け取って、そのままPDOでDBにINSERTしたいので、ユーザーの入力項目をいちいち変数に代入して、bindParamに埋め込む必要はないのかなと。

 

また、一旦変数に代入し直すことにより、余分な処理が生まれ可読性も下がるし、このユーザーの入力した値は処理の中で変更される可能性があるのか?など、読み手を混乱させるなあと。

 

素直にbindValueを使うのが良いと自分の中で結論付けた。

 

bindValueで$_POSTで受け取った値をバインドするコードが下記↓

$statement = $connection->prepare('INSERT INTO table (col1, col2, creat
ed_at) VALUE (:col1, :col2, :created_at)');
$statement->bindValue(':col1', $_POST['col1'], PDO::PARAM_STR);
$statement->bindValue(':col2', $_POST['col2'], PDO::PARAM_STR);
$statement->bindValue(':created_at', date('Y-m-d H:i:s'), PDO::PARAM_STR);
$statement->execute();

 

配列でキー指定した値をそのままバインドしている。