データベースに接続!PHPでMySQLを扱う方法【初心者向け】

プログラミング初心者向けにPHPでMySQLを扱う方法について解説しています。開発作業をする中でデータベースの処理を行うことは多々あります。PHPで書くMySQLの接続方法やデータベースの作成、表示方法を理解しましょう。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

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サービスを開発することが可能です。

独学に限界を感じている場合はご検討ください。