こんにちは!
PHPのLaravelやJavaScriptでWeb開発をしているフリラーンスエンジニアのファドと申します!
こちらの記事はPHP+SQL教材の第1回目の記事になります。
その他のPHP+SQL教材を学習したい方は下記リンクから直接教材へ飛ぶことができます。
PHPからDBを操作する
こちらの教材では、PHPで作成したプログラムを使ってDBとの通信やデータの操作を行っていきます。
※PHPの教材・課題とSQLの教材・課題がまだ終わっていない方は、それらから先に学習しましょう
PHPからDBを操作するために、事前準備に取り掛かりましょう!
SQLの教材の復習を兼ねて一緒に作成していきましょう!
事前準備①
以下の手順でphpMyAdminで学習用のデータベースを作成していきましょう!
1.メニュータブのデータベース
をクリック
2.データベース名を入力
今回はsample
という名前のDB(データベース)を作りましょう。
sampleと入力し、作成
をクリック
左側のメニューバーに先程作成したsample
が追加されましたね!
これでデータベースの作成は完了です。
★検索ワード
・phpMyAdmin DB作成
事前準備②
「事前準備①」で作成したsampleというデータベースの中にテーブル(表)
を作りましょう!
1.テーブル名を入力test01
という名前のテーブルを作りましょう。
名前の入力欄にtest01
を入力、カラムは4
で設定し、実行
を押してください。
2.カラムを入力
ここではテーブルの項目の名前やデータ型、長さ等を入力します。
データ型についてはこちらを参考
https://blog.proglus.jp/695/
データ型がINT
の長さは設定が必須ではないので今回は入力しません。
以下のように記入できたら右下の保存する
を押して保存しましょう。
このようにsampleの中にtest01というテーブルができていれば、成功です。
事前準備③
続いて、データを登録していきます。
今回は下記のようなデータをtest01に登録したいと思います。
id | name | gender | code |
---|---|---|---|
1 | タロウ | 男性 | 1 |
2 | ハナコ | 女性 | 1 |
3 | イチロウ | 男性 | 2 |
4 | キョウコ | 女性 | 2 |
5 | タケシ | 男性 | 3 |
以下の手順でphpMyAdminから登録できます。
1.データを登録したいテーブルをクリック
2.挿入をクリック
3.値を入力
まずは先程の表にあった、タロウのデータを作成します。値
に表を参考にデータを入れます。
idに1
、nameにタロウ
、genderに男性
、codeに001
をそれぞれ入力してください。
入力ができたら実行をクリック
下記の画像のような画面が表示されればOKです!
それではメニュータブから、表示をクリックしデータを確認しましょう。
4.データの確認
データがうまく登録できているか確認しましょう!
下記の画像のようになっていればOKです!
ここまで出来たら、先ほどと同じ要領で残りのデータを登録しましょう!
id | name | gender | code |
---|---|---|---|
1 | タロウ | 男性 | 1 |
2 | ハナコ | 女性 | 1 |
3 | イチロウ | 男性 | 2 |
4 | キョウコ | 女性 | 2 |
5 | タケシ | 男性 | 3 |
画像のように登録できたら、次へ進みましょう。
★検索ワード
・phpMyAdmin テーブル作成
・DB カラムとは
DBに接続する
フォルダ名:「db」
こちらの教材では、PHPのPDOクラスを使ってDBに接続していきます。
PDO(PHP Data Object)とは、PHP標準(5.1.0以降)のDB接続クラスのことです。
PHPは標準でMySQLやPostgreSQLやSQLiteなど、色々なDBに接続するための命令が用意されています。DBの種類によって条件分岐させて命令を呼び出せば、どのDBを利用する場合でも同じ関数を使うことができます。
htdocs内にdbというディレクトリを作成し、その配下にindex.php
を作成しましょう!
作成できたら、index.php
を下記の通り編集してください。
<?php
try {
// データベースに接続
$pdo = new PDO(
'mysql:dbname=sample;host=localhost;charset=utf8mb4',//dbname=で参照先のDB名を切り替えられます。
'root',//初期設定ではユーザー名は「root」です。
'root',//初期設定ではパスワードは「root」もしくは「''(空文字)」です。「'root'」でうまくいかない場合は「''」で試してみて下さい。
[
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
]
);
echo "DB接続に成功しました。";
} catch (PDOException $e) {
//エラー発生時の処理
echo $e->getMessage();
exit;
}
?>
コードが書けたらhttp://localhost:8888/db/ または、http://localhost/db/ にアクセスしましょう!
画像のようにDB接続に成功しました。
が出力されたら、DB接続成功です!
もし、うまく接続できない場合は以下のポイントをもう一度確認しましょう!
・ユーザー名は正しいか
・パスワードは正しいか
・db_nameは正しいか
・アクセスしているURLは正しいか
・コードの内容に文法的な誤りがないか
データの取得
フォルダ名:「db」
DBとの接続ができたところで事前準備で用意した、DBからデータの取得をしてみましょう!
書き方の基本は以下のとおりです!
$stmt = $pdo->prepare(SQL文);
$stmt->execute();
$stmt->fetchAll(PDO::FETCH_ASSOC);
prepare
は準備、execute
は実行、fetch
は読み込む動作です。
流れとしては
インスタンス化した$pdoクラスのprepare関数の引数にSQL文を渡し、execute関数を実行して準備したSQL文を送信。
fetchAllで結果を読み込んでいます。
SQL文は文字列として変数に格納してから使うのが良いでしょう。
基本的な書き方について学んだところで、早速実際にデータを取得してみましょう!index.php
を下記の通り編集してください。
<?php
try {
// データベースに接続
$pdo = new PDO(
'mysql:dbname=sample;host=localhost;charset=utf8mb4',//dbname=で参照先のDB名を切り替えられます。
'root',//初期設定ではユーザー名は「root」です。
'root',//初期設定ではパスワードは「root」もしくは「''(空文字)」です。「'root'」でうまくいかない場合は「''」で試してみて下さい。
[
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
]
);
// SQL実行
$sql = "SELECT * FROM sample.test01";
// SQL文を変数に代入
$stmt = $pdo->prepare($sql);
// SQL文が入った変数をprepare関数の引数に
$stmt->execute();
// SQL文を実行
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
// 実行結果を読み込み変数dataに代入
//結果の出力
var_dump($data);
} catch (PDOException $e) {
//エラー発生時の処理
echo $e->getMessage();
exit;
}
?>
ここまで書けたら、http://localhost:8888/db/ または、http://localhost/db/ にアクセスしましょう!
アクセスし、以下の画像のように表示されていればOKです!
これで、sampleデータベースのtest01テーブルのデータがすべて取得できました!
複数のファイルで処理を行う
フォルダ名:「commons」
先程までは、一つのファイルの中にDBへの接続処理とSQL文の実行処理を書いていましたが、
一つのファイル内に複数の処理を書いてしまうと、ファイルの行数が多くなってしまい、メンテナンスがしづらくなってしまいます。
そこで、DBと接続する処理とSQL文を実行する処理を、それぞれ別のファイルに記述してきましょう!
まずdbフォルダ内に、commons
フォルダを作成し、dbconnect.php
を作成しましょう。
dbconnect.phpにDBと接続する処理を書いていきます。
dbconnect.phpにDBと接続する処理を書いておけば、DB接続を行いたいタイミングでその関数を呼び出すことで使用することが可能になります。
dbconnect.php
を下記の通り編集してください。
<?php
function dbconnection() {
global $pdo, $e;
try {
// データベースに接続
$pdo = new PDO(
'mysql:dbname=sample;host=localhost;charset=utf8mb4',//dbname=で参照DB名を切り替えられます。
'root',//初期設定ではユーザー名は「root」になっています。
'root',//初期設定ではパスワードは「root」もしくは「''(空文字)」になっています。「'root'」でうまくいかない場合は「''」で試してみて下さい。
[
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
]
);
} catch (PDOException $e) {
//エラー発生時
echo $e->getMessage();
exit;
}
}
?>
そしてindex.php(DBの値を使いたいファイル)に
・dbconnect.phpファイルを読み込む処理
・dbconnect.php内にある、dbconnection()関数を実行する処理
を書いていきます。
<?php
require_once( "./commons/dbconnect.php" );
//require_once関数で外部ファイルを読み込みます。
dbconnection();
//関数を実行
?>
上記のように記述することで、dbconnect.phpに記述した、dbconnection()関数を実行することが出来ます。
では実際にデータを取得しましょう。
index.php
を下記の通り編集してください。
<?php
//DB接続処理
require_once( "./commons/dbconnect.php" );
dbconnection();
// SQL実行
$sql = "SELECT * FROM sample.test01";
$stmt = $pdo->prepare($sql);
$stmt->execute();
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
//結果の出力
var_dump($data);
?>
ここまで書けたら、http://localhost:8888/db/ または、http://localhost/db/ にアクセスしましょう!
アクセスし、以下の画像のように表示されていればOKです!
DB接続の処理を別ファイルに書くことで、コードがスッキリしましたね。
取得したデータから任意の値を表示する
フォルダ名:「db」
DBからデータを取得して表示をする際に、単純に全てのデータを上から順番に表示するだけですべてのWebサービスが成り立っているというわけではありません。
ときには、自分が使いたいデータのみを表示させたい場合があります。
そこで今回はDBから取得したデータの中から使いたい情報のみを、表示させる方法について説明してきます。
index.php
を下記の通り編集してください。
<?php
//DB接続処理
require_once( "./commons/dbconnect.php" );
dbconnection();
$sql = "SELECT * FROM sample.test01";
$stmt = $pdo->prepare($sql);
$stmt->execute();
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
var_dump($data[0]);
?>
こうすることで
idが1、nameがタロウ、genserが男性、codeが1の
ひとつのレコードのデータ情報のみを表示することが出来ます!
ポイントは変数detaの後ろに[0]がついているところです。
配列と同じように扱うことが出来ます。
ブラウザで確認してみましょう!
http://localhost:8888/db/ または、http://localhost/db/ にアクセスしましょう!
アクセスし、以下の画像のように表示されていればOKです!
タロウさんの情報のみが取得できていますね。
ぜひ、変数detaの後ろについている[0]の値を1や2に変更してみると、どうなるか確認してみてください!
カラム名を指定する
先程のコードではレコードごとにタロウさんのデータを表示してみました。
今回は、カラムを指定して任意のデータを表示させてみましょう!
index.php
を下記の通り編集してください。
<?php
//DB接続処理
require_once( "./commons/dbconnect.php" );
dbconnection();
$sql = "SELECT * FROM sample.test01";
$stmt = $pdo->prepare($sql);
$stmt->execute();
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
var_dump($data[0]['name']);
?>
ファイルの編集が出来たら、ブラウザで確認してみましょう!
http://localhost:8888/db/ または、http://localhost/db/ にアクセスしましょう!
アクセスし、以下の画像のように表示されていればOKです!
$data[0]['name']
とすることで、タロウという文字列のみ表示することが出来ました!
これは、test01テーブルにある一番上のレコードのカラム名nameのデータだけを表示したということです。
$data[0]のあとの[‘name’]の値を[‘id’]や[‘gender’]などに変更してみると、どのようにデータが表示されるか確認してみてください!
foreachやwhileを使ったデータの取得
フォルダ名:「db」
一つ前のレクチャーで、DBから取得したデータから任意の値を表示する方法について学習していただきましたが、そこで「DBから取得したデータは配列のように扱うことができる」という説明をしました。
そこで、今回は配列から要素を取得する際によく使われているforeachと、繰り返し処理に使われるwhileを使用し、DBから取得したデータを一つずつ表示させてみましょう!
index.php
を下記の通り編集してください。
<?php
//DB接続処理
require_once( "./commons/dbconnect.php" );
dbconnection();
$data = $pdo->query("SELECT * FROM test01");
foreach ($data as $row) {
$id = $row['id'];
$name = $row['name'];
$gender = $row['gender'];
$code = $row['code'];
echo 'idは' . $id . 'です ';
echo 'nameは' . $name. 'です ';
echo 'genderは' . $gender. 'です ';
echo 'codeは' . $code. 'です' . '<br>';
}
?>
ファイルの編集が出来たら、ブラウザで確認してみましょう!
http://localhost:8888/db/ または、http://localhost/db/ にアクセスしましょう!
アクセスし、以下の画像のように表示されていればOKです!
このようにforeachを使用することで、DBから取得したデータすべてを順番に表示することが出来ます!
whileを使用する
foreachで表示させる方法がわかったところで、続いてwhileを使用していきます。
index.php
を下記の通り編集してください。
<?php
//DB接続処理
require_once( "./commons/dbconnect.php" );
dbconnection();
$data = $pdo->query("SELECT * FROM test01");
while ($row = $data->fetch()) {
$id = $row['id'];
$name = $row['name'];
$gender = $row['gender'];
$code = $row['code'];
echo 'idは' . $id . 'です ';
echo 'nameは' . $name. 'です ';
echo 'genderは' . $gender. 'です ';
echo 'codeは' . $code. 'です' . '<br>';
}
?>
ファイルの編集が出来たら、ブラウザで確認してみましょう!
http://localhost:8888/db/ または、http://localhost/db/ にアクセスしましょう!
アクセスし、以下の画像のように表示されていればOKです!
このようにwhileとforeachを使用し、まとめて表示することも可能です!
また、今回はprepare()やexecute()を使用せず、query()
を使用しました。
query()とprepare()やexecute()の書き方の違いにも注意しましょう!
次の教材
次の教材は下記から簡単に飛ぶことができます!
引き続きプログラミングを楽しんでいきましょう!
プログラミング学習サポートについて
「独学で挫折した。。。」
「一人でのプログラミング学習がしんどい。。。」
「未経験からエンジニア転職をしたいけど何をしたら良いかわからない。。。」
このような悩みをお持ちの方向けに、本教材作成者のファドがMENTAという学習サイトにてあなたのプログラミング学習とエンジニア転職を徹底サポートいたします!
サポート価格はなんと1日あたりたったの約300円!
教材で分からない箇所のサポートはもちろんのこと、本サイトで公開しているすべての課題の解答も公開しております。
また、MENTAで学習を終わらせていただいた方限定で懇意にしていただいている企業さんを紹介することもあります!
なお、サポート内容の詳細は下記の通りです。
- 目標設定
- マインドセット
- オリジナル教材見放題
- オリジナル課題見放題
- オリジナル課題の解答見放題
- 課題コードレビュー
- 教材への無制限質問
- 課題への無制限質問
- ポートフォリオ作成アドバイス
- 褒めのコーチング
いくつかのプランを用意させていただいておりますので、下記より一度ご覧ください!
コメント