初めに
・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次情報で学習を進めることの大切さを学びました。