PHPのプリプリについて

PHPのプリペアドステートメントについて
割と使い方が特殊でむずかしめだったので備忘録で残します。
前提の接続とインスタンス生成は完了しているとして、
まずは一連の流れ的には以下のような感じかな

if($sql = mysqli->prepare('SELECT id,name FROM user WHERE id = ?')){
  $sql->bind_param('i',1);
  $sql->execute();
  $sql->store_result();
  $sql->bind_result($id, $name);
  $sql->fetch();
  $sql->close();
}

if文で囲ってますがマニュアルによるとエラーしたとき用らしいです。
エラーってどんなときだ?接続が切れたときとか?
とりあえず1つ1つ解説

if($sql = mysqli->prepare('SELECT id,name FROM user WHERE id = ?'){
}

これでまず実行するSQL文を記載する。

$sql->bind_param('i',1);

これで「?」に入れる値を設定になるのかな。最初の引数で「i」は数値、
「s」は文字列になるらしいです。

$sql->execute();
$sql->store_result();

まあとくに言うことはないです。普通に実行して結果セットを転送(?)するみたいです。どこに転送だ…。一時的なメモリにかな。

$sql->bind_result($id, $name);
$sql->fetch();

ここの順番が解せない…。こうすると$idと$nameにそれぞれ結果セット1レコード目のidとnameが入るみたいです。
先に変数を用意してからfetchすると代入されるみたいです。

$sql->close();

最後はきちんとcloseしようね!大事!

簡単だけど以上になります。
まあ正直普通にSQL文の文字列の中に変数で入れればこんな面倒なことしなくて済むんですけどね。これをしないとSQLインジェクションの餌食になってしまいます。
それにしても「プリペアドステートメント」って言葉いいですね。
プリプリしてそう。

この記事が気に入ったらサポートをしてみませんか?