[PHP][PDO]prepareでのバインド方法整理
データをstmtに渡す部分をちょくちょく待ちがえて混乱するのでメモ
参考:http://php.net/manual/ja/pdostatement.execute.php
[メモ]
大きく、①連想配列の要素名で紐付けるか、②bindValue,bindParamで明示的に紐付けするか、の2通りがある。
で、①の場合はexecute時に配列を渡す。②の場合はexecute時の引数は不要。というところがこんがらがっていた。
①連想配列の要素名で自動で紐付ける場合-execute時にデータを渡す
これを一番良く使いたいのだけど忘れてしまう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
/* SQLを用意 */ $sql = "INSERT INTO TABLE (id,name) VALUES (:id, :name)"; /* prepare */ $stmt = $db->prepare($sql); //$dbにコネクションがあるとして /*プレースホルダ(:id, :name)に指定した値と同じ要素名を持つ連想配列を作成する。*/ $data = array( ':id' = '100', ':name' = 'samplename', ); /* sql実行 */ $res =$stmt->execute($data); //★ここで配列を渡す |
②bindParam,bindValueを利用する場合->prepare後にbindを実行してexecuteする。
bindValue(プレースホルダーに値を紐付ける)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
/* SQL の用意*/ $sql = "INSERT INTO TABLE (id,name) VALUES (:id, :name)"; /* prepareの実行*/ $stmt = $this->db->prepare($sql); $id = '100'; $name = 'sample_name'; /* bindの実行*/ $stmt->bindValue(':id', $id); //プレースホルダと変数の紐付け 変数OK $stmt->bindValue(':name', 'sample_name'); //値直接OK /* sql実行*/ $stmt->execute(); //bind済みなので引数無し |
bindParam(プレースホルダーに変数を紐付ける)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
/* SQL の用意*/ $sql = "INSERT INTO TABLE (id,name) VALUES (:id, :name)"; /* prepareの実行*/ $stmt = $this->db->prepare($sql); $id = '100'; $name = 'sample_name'; /* bindの実行*/ $stmt->bindParam(':id', $id); //プレースホルダと変数の紐付け $stmt->bindParam(':name', $name); $id = '200'; // 後から紐づいた変数の値を変更すると、その値が有効になる。 /* sql実行*/ $stmt->execute(); //bind済みなので引数無し |
関連記事
-
-
mysql 内部結合・外部結合違い inner join,left join,right join
参考サイト]http://mathemathiko.hatenablog.com …
-
-
[php]ログインセッションの維持・有効期間について (session,cookie)
cookieとsessionファイルと、登場人物が複数いるので、どこに何を設定す …
-
-
自然順と辞書順のソートの違い
本ページの内容は下記リンクに集約しました。 http://www. …
-
-
[sql][mysql]特定グループ毎に最大の値を持つ行を取得する(相関サブクエリー、JOIN)
標題のとおり ぱっと考えるとMAX()でとればいいように思えるが、GROUP B …
-
-
phpでImageMagickを使うための各種インストール
phpからImageMagickを使いたい。peclのimagickをインストー …