2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

データベースを操作する際に使うメソッドの整理

Last updated at Posted at 2021-05-10

この記事を書く目的

データベースを操作するメソッドの使い方、違いがうまく分からないので理解を深めると共に整理する為

メソッド

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の取得内容

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?