5
3

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.

【PHP】queryとprepare/execute/fetchの意味

Last updated at Posted at 2021-02-19

初めに

・PHP/MySQLを触り始めて1か月
・[こちら] (https://qiita.com/TkTkTkTkTako/items/d32fd686ce5335101e2a)のアプリ開発をした際に思った疑問点を深く学んでみようと思い記事を執筆

課題

PHP側でデータベースから値を取得したり、データベースに値を保存したりする際に

$members = $db->prepare('...');
$members->execute('...');
$member = $members->fetch();

$member = $db->query('...');

を何気なく使っていましたが、各関数の意味をしっかり理解せずに使っていました。

現在の理解(Before)

現在の私の各関数の理解は以下の通りです。

query

SELECT文を使い、かつforeachで繰り返し処理をする際に使う関数

prepare

SELECT文を使い、かつ取り出す値が単体である(繰り返し処理等をしない)際に使う関数

execute

prepareとペアで使うので、prepareで取得したデータベース上の値をPHPで受け取る

fetch

executeで取り出した値を列毎に配列で受け取る

学習結果(After)

query

・SQLステートメントを実行し、結果セットをPDOStatementオブジェクトとして返す
 ⇒prepareとexecuteを一緒に実行する
・prepareとの違い:変動値がない場合

// 変動値がないコード
$pdo->query('SELECT * FROM user');

答え合わせ:×

prepare

文を実行する準備を行い、文オブジェクトを返す
⇒実行したいSQL文をセットする
・queryとの違い:変動値がある場合

// 変動値があるコード
$stmt = $pdo->prepare("SELECT * FROM user WHERE name=:name");

答え合わせ:△

execute

SQLステートメントを実行し、作用した行数を返す
⇒SQLの実行
答え合わせ:△

fetch

結果セットから次の行を取得する
⇒executeで取得した行の値を取得する
答え合わせ:〇

#まとめ
・特にqueryとprepare/executeの違いが言語化しつつ学べました。
・イメージは間違えていなかったことがわかりましたが、公式ドキュメントを見ると適切な言葉選びをされている、と実感し改めて1次情報で学習を進めることの大切さを学びました。

5
3
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
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?