データベースに接続!PHPでMySQLを扱う方法【初心者向け】
プログラミング初心者向けにPHPでMySQLを扱う方法について解説しています。開発作業をする中でデータベースの処理を行うことは多々あります。PHPで書くMySQLの接続方法やデータベースの作成、表示方法を理解しましょう。
TechAcademyマガジンは受講者数No.1のオンラインプログラミングスクールTechAcademy [テックアカデミー]が運営。初心者向けに解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。
PHPでMySQLを扱う方法について解説しています。
開発作業をしていてプログラムを書くだけでなく、データベースを操作することも多々あります。MySQLはデータベースの中でもトップクラスの認知度があり、使用する機会も多くあります。
使い方を覚えておけば様々なシーンで役立つでしょう。
なお本記事は、TechAcademyのPHPオンライン講座の内容をもとにしています。
MySQLとは
中身のソースコードが公開されているリレーショナルデータベースで、オープンソース系としては世界的に最も多く使用されています。
表計算ソフトであるExcelなどのような感じで、データを表示してくれます。
ほとんどのレンタルサーバーで使用することが出来き、データを安全に、かつ高速に検索し、変更の一貫性を保つことが出来ます。

田島メンター!MySQLって何でしょうか?

データを安全に、そして大量のデータも高速に検索できるソフトウェアなんだ。PHPから接続できるんだよ。

PHPで接続して、データを取得したり、変更したり出来るってことですか?

そうだね。まずはMySQLで出来ることを見てみよう!
MySQLで出来ること
MySQLなどのリレーショナルデータベースで出来ることは、主に以下のようになります。
データの変更の一貫性を保つトランザクション
例えばあるブログで、新規記事を投稿し、その記事が属するカテゴリーの個数を1つ増やしたとします。
これらの処理は、分離できない処理で、どちらか一方だけ実行されても困ってしまいます。
複数の処理を切り離せない処理として実行する、さもなくば複数の処理全て失敗とみなして実行しない、ということが出来ます。
インデックスによる高速な検索
コンピュータでもデータ数が多いと検索が遅くなってしまいます。しかしインデックスを用いてデータを整理整頓しておくと、何千万件の中からでも一瞬で目的のデータを検索することが出来ます。
インデックスというのは、漫画コミックなどで言えば、巻数順に並べておくようなもので、並べておけば素早く手に取ることが出来ます。
条件を指定してデータを検索
価格の高い順や低い順などを10件ずつ、といったようにデータに条件を指定して、柔軟に検索することが出来ます。
[PR] PHPのプログラミングで挫折しない学習方法を動画で公開中
mysql_connectの書き方
mysql_connectはデータベースに接続するために使用します。
接続リソース mysql_connect("接続先サーバー","ユーザーネーム","パスワード");
mysqlが置いてあるサーバーに対して接続します。mysqlに設定されたユーザーネームとパスワードで接続します。接続リソースが返ってきますが、その後にmysqlに操作を加える場合にこの接続リソースを使います。
mysql_create_dbの書き方
mysql_create_dbは、データベースを作成する際に使用します。またmysql_queryでも作成することが出来ます。
mysql_query("CREATE DATABASE データベース名 DEFAULT CHARACTER SET utf8"); mysql_create_db("データベース名");
mysql_queryの書き方
mysqlに接続すると、sql文を発行することが出来ます。その時にmysql_queryを使用します。データ追加や検索やその他ヘッダ情報などを取得することが出来ます。
mysql_query("SQL文");

インデックスやトランザクションって何かすごそうですね!

データが数億件あっても、一瞬で目的のデータを検索できるんだよ。

それは、すごいですね!
実際に書いてみよう
mysqlに接続してデータベースを作成し、データベースの一覧を表示させてみます。
xamppとmariadbで実行していますが、mysqlと互換性が高いのでそのまま使用できます。
test.php
<?php $link = mysql_connect("localhost","root",""); mysql_query("create database if not exists test2 default character set utf8"); $result = mysql_query("show databases"); while ($row = mysql_fetch_array($result, MYSQL_NUM)) { echo $row[0]; echo "<br>"; } ?>
実行結果
information_schema mysql performance_schema phpmyadmin test2 wordpress
show databasesというのはmysql専用のクエリーで、データベース一覧を表示させます。mysql_fetch_arrayに結果リソースを渡し、数字配列を選択します。
一行ずつ出力すると、作成されているデータベース一覧が表示されます。
mysqlに接続し、クエリーを発行し、結果を受け取るというのが基本操作になります。
phpとmysqlを使用しチャット投稿を表示させてみる
それでは、phpとmysqlを使用して、チャットサービスの投稿を表示させてみます。
チャットサービスとはtwitterやline等のサービスです。
チャットサービス表示部分の実装
今回は、Mysqlにchatデータベースとtitleテーブルが存在すると仮定して実装してみます。
テーブル情報
titleテーブルの中には、自動的に連番が追加されるnoカラム、ユーザー名を表すnameカラムと、投稿内容を表すpostカラムが入っています。
php処理の説明
それでは、それぞれの行について説明します。
Mysqlへの接続情報
最初に変数dbに対して、Mysqlに接続するための情報を格納しています。
今回は、mysqli_connectというphpの関数を使用してMysqlに接続しています。
mysqli_connectの()内に記載されているパラメーターは次のとおりです。
mysqli_connect( '接続ホスト名', '接続ユーザー名', '接続パスワード名', '接続データベース名' );
接続エラー処理
その後、次のif文処理でMysqlに接続できなかった場合にエラーを出力する処理をしています。
if ($db->connect_error) { echo $db->connect_error; exit (); }
titleテーブルデータ取得
次のsql変数に代入する処理で、titleテーブルに入っているデータを全て取得しています。
$sql = 'SELECT * FROM title ';
表示処理
次のwhile処理で、データが存在する間、変数$dataに対し、titleテーブルの中に入っている、番号:作者名:内容を代入しながら、配列を使用して表示しています。
while ($data = mysql_fetch_array($result)) { echo '<p>' . $data['no'] . ':' . $data['name'] . ':' . $data['post'] . "</p>\n"; }
データベース接続終了処理
最後に、データベースとの接続を閉じています。もし、データベースとの接続状態に問題が発生した場合、データベースとの接続を閉じることができないと表示されます。
$db = mysql_close($db); if (!$db) { exit('データベースとの接続を閉じられませんでした。'); }
Mysqlと接続してtitleテーブルを表示させるphpプログラム
chat.php
<?php $db = new mysqli('localhost','root','','chat'); if ($db->connect_error) { echo $db->connect_error; exit (); } $sql = 'SELECT * FROM title ORDER BY created_at ASC'; $result = mysqli_query($db, $sql); while ($data = mysql_fetch_array($result)) { echo '<p>' . $data['no'] . ':' . $data['name'] . ':' . $data['post'] . "</p>\n"; } $db = mysql_close($db); if (!$db) { exit('データベースとの接続を閉じられませんでした。'); }
表示結果
1:太郎:太郎最初の投稿です!
2:次郎:次郎も負けじと投稿です!
3:次郎:次郎が連続で投稿です!
4:太郎:太郎も再度投稿しました。
5:三郎:三郎の初めての投稿です。
以前のphpではphpファイルの最後に?>を記載していましたが、最新バージョンでは何も記載しなければ、その最終行で処理が終了するようになりました。
おわりに
以上、PHPでMySQLを扱う方法を紹介しました。
今回紹介したMySQLの文法は基本的な内容なので、ぜひ覚えておきましょう。開発作業全体のイメージも湧いてより効率的に作業ができるはずです。

MySQLにあるデータベース一覧を表示しているんですか?

データベースがあって、その中にテーブルがたくさんあるって感じかな。テーブルは、表計算のように列と行のようになっているんだ。

便利なのはいいんですが、何か難しそうですね。

慣れれば簡単だよ。MySQLにPHPからIDとパスワードを使って接続する。そして、データベースを選択する。それから、テーブルを検索したり、データを追加したりするんだよ。
また、PHPを勉強していて、
- もっと効率的に勉強したい
- 誰かに聞きながら学びたい
- 自分でWebサービスを作りたい
と思ったことはないでしょうか。
そんな方のために、TechAcademyではオンラインブートキャンプPHP/Laravelコースを提供しています。
現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間でオリジナルWebサービスを開発することが可能です。
独学に限界を感じている場合はご検討ください。