bindParam(param, var, type)
変数は、参照としてバインドされ、execute()が呼ばれた場合のみ、変換される。
param: ‘:name’ のように、プレースホルダーを記述
var: sqlステートメントにバインドする変数
type: PDO::PARAM_STR など、STRの部分は変数の型がはいる
bindValue(param, var, type)
bindValue()はすぐに変数を評価する。
param: ‘:name’ のように、プレースホルダーを記述
var: sqlステートメントにバインドする変数
type: PDO::PARAM_STR など、STRの部分は変数の型がはいる
違いについて
bindParamは、整数型を渡したとき、execute実行後に、整数型に変わる。
bindParamは、パラメーターを見ているため、execute実行前まで、参照する値は変更可能。
bindValueは、値を見ているため、bindValueの前に書かれた、値がそのまま入り、変更不可。
実行するタイミングに違いがあるため、このようになる。
http://piyopiyocs.blog115.fc2.com/blog-entry-656.html
foreachなどのループで、毎回変数が変わる場合は、値が上書きされるため、ループできない。
https://webmaster.chielog.com/php/133.html
bindValueを使ったほうが無難なようだ。
bindValueやbindParamを使わない方法
https://bituse.info/php/35
bindparamやbindValueなどの関数を使わずに、executeの関数に、配列を引数として、書く方法もある。
疑問符プレースホルダ ? を使う場合
配列に順番にバインドする値を入れることもできるが、上に記述した、bindValueも使える。
$stmt = $pdo -> prepare( “INSERT INTO table (id, name) VALUES (?, ?));
$stmt -> execute(array($id, $name));
配列に、バインドする値を順番に入れる。
コロンを使う場合は、連想配列を使う。
$stmt = $pdo -> prepare( “INSERT INTO table (id, name) VALUES (:id, :name));
$stmt -> execute(array(“id” => $id, “name” => $name));
どちらの場合も、引用符で囲む ’?’ と
値はバインドされません。
検索などで、%を使うときは、あらかじめ、置き換える変数に文字列として入れておきましょう。
|
|