この記事を書く目的
データベースを操作するメソッドの使い方、違いがうまく分からないので理解を深めると共に整理する為
メソッド
query
prepare
bindParam
bindValue
execute
fetch
fetchAll
データベースを操作する手順
①データベースに接続する。
②実行したいSQL文をセットする。
③SQLに対してパラメーターをセットする。【任意】
④実際にSQLを実行する。
⑤結果を取得する。【任意】
⑥データーベースから切断する。
query
・指定したSQL文をデータベースに対して発行してくれる役割
・queryで実行まで行う(execute必要ない)
// SQL文の組み立て(クエリの組み立て)
$sql = "SELECT * FROM member";
// queryの結果は配列で返ってくる
$stmt = $pdo->query($sql);
prepare
・実行したいSQL文の中に「変動値」が入る場合に使用
・SQL文の実行準備を行い文オブジェクトを返す
// SQL文の組み立て(クエリの組み立て)
$sql = "SELECT * FROM member WHERE email=?";
// 変動値をSQL文に含める準備
$stmt = $pdo->prepare($sql);
// 変動値を含んだSQLを実行
$stmt->execute(array($_POST(email));
bindParam
・第二引数にはパラメータにバインドする「変数」を指定
・値を指定することはできない
・値の参照を受け取る
・execute()関数を使用した際にバインドが確定
$stmt = $pdo->prepare("select * from member where email = :e-mail");
//セットする変数を定義
$email = example.jp;
//第二引数に変数をセットする
$stmt->bindParam("email",$email);
//結果表示
$stmt->execute();
$result = $stmt->fetch();
echo "email = ".$result['email']; // example.jp と表示
//以降は変数の中身を変えてexecuteを実行するだけ
$email = example_1.jp;
//結果表示
$stmt->execute();
$result = $stmt->fetch();
echo "email = ".$result['email']; // example_1.jp と表示
bindValue
・変数の値をバインドするための関数
$stmt = $pdo->prepare("select * from member where email = :e-mail");
//セットする変数を定義
$email = example.jp;
//第二引数に変数をセットする
$stmt->bindvalue("email",$email);
//結果表示
$stmt->execute();
$result = $stmt->fetch();
echo "email = ".$result['email']; // example.jp と表示
//変数の中身を変えても表示は一緒
$email = example_1.jp;
//結果表示
$stmt->execute();
$result = $stmt->fetch();
echo "email = ".$result['email']; // example.jp と表示
execute
・PHPの標準関数でプリペアドステートメントを実行する際に使われる関数
・プリペアドステートメントは、SQL文で値が変わる可能性がある箇所に対して、変数のように別の文字列を入れておき、後で置き換える仕組み
// SQL文の組み立て(クエリの組み立て)
$sql = "SELECT * FROM member";
// プリペアドステートメントの作成
$stmt = $pdo->prepare($sql);
// クエリの実行
$stmt->execute();
fetch
・該当するデータを1行返す
$sql = "SELECT * FROM member";
// プリペアドステートメントの作成
$stmt = $pdo->query($sql);
// クエリの実行
$stmts = $stmt->fetch();
var_dump($stmts);
<結果>
array(6) {
["id"]=> string(1) "1"
[0]=> string(1) "1"
["name"]=> string(6) "田中"
[1]=> string(6) "田中"
["age"]=> string(2) "40"
[2]=> string(2) "40" }
fetchAll
・該当するすべてのデータを返す
$sql = "SELECT * FROM list";
// プリペアドステートメントの作成
$stmt = $db->query($sql);
// クエリの実行
$stmts = $stmt->fetchAll();
var_dump($stmts);
<結果>
array(2) { [0]=> array(6)
{ ["id"]=> string(1) "1" [0]=> string(1) "1"
["name"]=> string(6) "田中" [1]=> string(6) "田中"
["age"]=> string(2) "40" [2]=> string(2) "40" }
[1]=> array(6) {
["id"]=> string(1) "2" [0]=> string(1) "2"
["name"]=> string(6) "佐藤" [1]=> string(6) "佐藤"
["age"]=> string(2) "35" [2]=> string(2) "35" }
}
学んだこと
・queryは実行まで行う(execute必要ない)
・bindParamとbindValueの違い
・値の参照の意味
・fetch,fetchAllの取得内容