【DB:出力条件】WHEREを使った書き方

【DB:接続と出力】PDOオブジェクトで、DBにアクセスしてデータを配列に格納するところまではできた。

ただ実際は、ユーザーのアクションごとに必要なテーブルやレコードは変わし、毎回全部読み込んでたら使いたい情報を非常に記述しにくいのでWHEREを使って、SQLの時点で取り出すDB情報を検索するのだ。

f:id:aruku-hito:20191122154418p:plain
今回はplayersテーブルから、主に3パターン紹介
カラム :縦列
レコード:横列

カラムを指定

「この縦列を一気にほしいぜ!」(たぶん比較するのかな?)
sql文に書いていく。

<?php
$sql = 'SELECT name, level FROM players';
    $statement = $pdo->prepare($sql);
    $statement->execute();
?>

f:id:aruku-hito:20191122154954p:plain

条件を指定1

条件の数値や文字が決まっている場合。
「レベル10以上のつわものだけ集え!」「ケンってやつの情報が欲しい!」

<?php
$sql = 'SELECT * FROM players WHERE level >= 10';
    $statement = $pdo->prepare($sql);
    $statement->execute();
?>

f:id:aruku-hito:20191122155419p:plain

<?php
$sql = 'SELECT * FROM players WHERE name = "ケン"';
    $statement = $pdo->prepare($sql);
    $statement->execute();
?>

f:id:aruku-hito:20191122155458p:plain

条件を指定2

条件の数値が変数の場合。
実戦ではこれが圧倒的に多い。なぜならユーザーのアクションごとに使うデータや出力するデータが変動するからだ。
ただし、WHEREの後ろに変数を指定することはできない。(「なんと…!」)

1.いったん「:〇〇」で書く
2.bindValue(Param)メソッドで「:〇〇」と変数名をセットにする

第一引数に「:〇〇」を、第二引数に変数を入れればOK(値を直接入れてもOK)

$low_value = 10 のとき

<?php
$sql = 'SELECT * FROM players WHERE level >= :lower';
    $statement = $pdo->prepare($sql);
    $statement->bindValue(':lower', $low_value, PDO::PARAM_INT);
    $statement->execute();
?>

f:id:aruku-hito:20191122155419p:plain

bindには2種類ある

bindValue

第二引数に入れれるもの
変数:〇
値 :〇
評価:即値をバインド
推奨:文字列の時 第三引数にPDO::PARAM_STRを入れる

※第三引数は入れないとエラーが出る

bindParam

第二引数に入れれるもの
変数:〇
値 :×
評価:実行するとき。つまり、ある変数があるが、executeの手前で変数が変わるとその値をバインドする。
推奨:数値の時 第三引数にPDO::PARAM_INTを入れる

※第三引数は入れないとエラーが出る


===========
参照記事(ありがとうございました!!)
https://qiita.com/tabo_purify/items/0a69fd48018c4ebfd2f2qiita.com

===========