データベースに接続!PHPでMySQLを扱う方法【初心者向け】
プログラミング初心者向けにPHPでMySQLを扱う方法について解説しています。開発作業をする中でデータベースの処理を行うことは多々あります。PHPで書くMySQLの接続方法やデータベースの作成、表示方法を理解しましょう。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名 調査手法:インターネット調査
PHPでMySQLを扱う方法について、テックアカデミーのメンター(現役エンジニア)が実際のコードを使用して初心者向けに解説します。
開発作業をしていてプログラムを書くだけでなく、データベースを操作することも多々あります。
MySQLはデータベースの中でもトップクラスの認知度があり、使用する機会も多くあります。
使い方を覚えておけば様々なシーンで役立つでしょう。
目次
- データベースとは
- MySQLとは
- MySQLでできること
- mysql_connectの書き方
- mysql_create_dbの書き方
- mysql_queryの書き方
- 実際に書いてみよう
- PHPとMySQLを使用しチャット投稿を表示させてみる
- まとめ
- PHPを学習中の方へ
そもそもPHPについてよく分からないという方は、PHPとは何なのか解説した記事を読むとさらに理解が深まります。
データベースとは
データベースとは、多くのデータを一元管理することができるデータ管理専門のソフトウェアです。
データベースのようなソフトウェアをミドルウェアとも言います。
ミドルウェアとは、表示処理などを行うWebアプリケーションとサーバ制御するOSとの間に存在するソフトウェアです。
ミドルウェアがなくてもシステムとして動作可能ですが、ミドルウェアがあることで大規模システム開発を効率的に行うことが可能です。
データベースのメリット
データベースを利用するメリットは大きく3つあります。
- 安全にデータをバックアップできる
- データベースソフトウェアの機能を活用できる
- セキュリティを強化できる
データベースをバックアップする
データベースをミドルウェアとして利用することで、システム内の必要なコンテンツであるデータは、すべてデータベースの中に保存可能です。
データベースにコンテンツを保存できるということは、データベースさえバックアップしておけば、システムが破損してもコンテンツの復元が可能だということです。
データベースにデータを保存しておくとはつまり、決まった形式でデータを安全に保管できるということでもあります。
データベースソフトウェアの機能を活用できる
データベースソフトウェアを利用することで、高速にデータを扱うことが可能になります。
データを扱う例としては、データの検索などがあります。
データ自体が膨大な量になった時に、データベースソフトウェアの検索速度が高速であれば、それだけで快適に動作します。
セキュリティに強くなる
データベースソフトウェアを利用しない場合、データを安全に保管することが難しくなります。
例えば、データにアクセスする際にパスワードが設定されていなかったり、複数人で同時にアクセスすることでデータが破損することもあります。
データベースを利用することで、セキュリティに強くなるメリットがあります。
データベースのデメリット
データベースソフトウェアを利用するということは、データベースに関する知識が必要になります。
もし、1ページのみのHTMLで構成される自己紹介ページなどであれば、データベースを利用せずHTML内にコンテンツとなるデータを記載したほうが、サイト公開も保守管理も簡単で良いでしょう。
データベースの種類
データベースの種類には大きく4つあります。
- RDBMS
- NoSQL
- 階層型
- ネットワーク型
RDBMS
RDBMSとは、Relational DataBase Management Systemの略です。
日本語でいうと関係型データベースと言われることもあります。
エンジニアはRDBMSということが多いです。
データ構造自体は、表計算ソフトのExcelのような感じで管理されます。
データの整合性に強く、管理しやすいため、Webアプリケーション開発時にはRDBMSを利用することが多いです。
製品例:OracleDatabase、SQLserver、MySQL 、PostgreSQL
NoSQL
NoSQLとは、大規模なデータを扱う際に利用します。
キーバリュー型、カラム指向型、ドキュメント指向型、グラフ型など、様々な種類があります。
データの整合性より、データ処理能力に焦点を当てたGoogle検索などのシステムで利用されます。
製品例:Hadoop、Google File System、Firebase(Cloud Firestore、RealtimeDatabase)
階層型
階層型データベースはアクセス速度が速いメリットがあります。
しかし、データの重複が発生するというデメリットがあります。
データの柔軟な取り扱いが難しく、高度な知識が必要なため、一般的に利用されることは少ないです。
ネットワーク型
ネットワーク型データベースは、データの重複を避けられるというメリットがあります。
データの柔軟な取り扱いが難しく、高度な知識が必要なため、一般的に利用されることは少ないです。
MySQLとは
中身のソースコードが公開されているリレーショナルデータベースで、オープンソース系としては世界的に最も多く使用されています。
表計算ソフトであるExcelなどのような感じで、データを表示してくれます。
ほとんどのレンタルサーバで使用でき、データを安全かつ高速に検索し、変更の一貫性を保つことができます。
田島メンター!MySQLって何でしょうか?
データを安全に、そして大量のデータも高速に検索できるソフトウェアなんだ。PHPから接続できるんだよ。
PHPで接続して、データを取得したり、変更したりできるってことですか?
そうだね。まずはMySQLでできることを見てみよう!
[PR] PHPを学んで未経験からWebエンジニアを目指す方法とは
MySQLでできること
MySQLなどのリレーショナルデータベースでできることは、主に以下の通りです。
データの変更の一貫性を保つトランザクション
例えばあるブログで、新規記事を投稿し、その記事が属するカテゴリーの個数を1つ増やしたとします。
これらの処理は分離できない処理で、どちらか一方だけ実行されても困ってしまいます。
複数の処理を切り離せない処理として実行する、さもなくば複数の処理すべて失敗とみなして実行しない、ということができます。
インデックスによる高速な検索
コンピュータでもデータ数が多いと検索が遅くなってしまいます。
しかしインデックスを用いてデータを整理整頓しておくと、何千万件の中からでも一瞬で目的のデータを検索できます。
インデックスは、漫画・コミックなどでいえば巻数順に並べておくようなもので、並べておけば素早く手に取ることができます。
条件を指定してデータを検索
価格の高い順や低い順などを10件ずつ、といったようにデータに条件を指定して、柔軟に検索できます。
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に結果リソースを渡し、数字配列を選択します。
1行ずつ出力すると、作成されているデータベース一覧が表示されます。
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文処理でmysqliに接続できなかった場合にエラーを出力する処理をしています。
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にあるデータベース一覧を表示しているんですか?
データベースがあって、その中にテーブルがたくさんあるって感じかな。テーブルは、表計算のように列と行のようになっているんだ。
便利なのはいいんですが、何か難しそうですね。
慣れれば簡単だよ。MySQLにPHPからIDとパスワードを使って接続する。そして、データベースを選択する。それから、テーブルを検索したり、データを追加したりするんだよ。
PHPを学習中の方へ
これで解説は終了です、お疲れさまでした。
- つまずかず「効率的に」学びたい
- 副業や転職後の「現場で使える」知識やスキルを身につけたい
プログラミングを学習していて、このように思ったことはありませんか?
テックアカデミーのPHP/Laravelコースでは、第一線で活躍する「プロのエンジニア」が教えているので、効率的に実践的なスキルを完全オンラインでしっかり習得できます。
合格率10%の選考を通過した、選ばれたエンジニアの手厚いサポートを受けながら、PHP/Laravelを使ったWebアプリケーション開発を学べます。
まずは一度、無料体験で学習の悩みや今後のキャリアについて話してみて、「現役エンジニアから教わること」を実感してみてください。
時間がない方、深く知ってから体験してみたい方は、今スグ見られる説明動画から先に視聴することをおすすめします!