データバインド bindValue bindParam

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));

どちらの場合も、引用符で囲む ’?’ と

値はバインドされません。

検索などで、%を使うときは、あらかじめ、置き換える変数に文字列として入れておきましょう。

 

【楽天1位】ノートパソコンスタンド パソコンスタンド 折りたたみ式 ノート PCスタンド 改良版 アルミ合金製 ホルダー 高さ 角度調整可能 滑り止め 軽量 姿勢改善 Macbook/Macbook Air/Macbook Pro/iPad//タブレットなど9~17インチまでに対応

【8段階の角度調節】 Blanche PCスタンド ノートパソコンスタンド ノートpc スタンド ノートPCスタンド 収納ケース付き リモートワーク 在宅ワーク アルミニウム ノートパソコン タブレット スタンド 角度調節 ノートブック アルミスタンド

 

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です