初心者でも安心!PHP7×MySQLでデータベースに接続しよう【入門編】

「MySQLってよく見かけるけどなんだろう・・・」

「PHPからMySQLのデータにアクセスするにはどうしたらいいんだろう・・・」

「PHPとMySQLは簡単に連携できるのかな?難しそう・・・」

と不安に思うことがあるかと思います。

そんなあなたにこの記事では、

・MySQLとは
・MySQLの起動~テーブルを作成する方法
・MySQLに接続する方法

などの基本的な内容から、

・SQLクエリを実行する方法
・PDOを使用する方法

などの応用的な使い方についても解説します。

ここでは、そんなMySQLについてテーブルの作成方法から、PHPでのデータベースの接続~SQLクエリの実行まで解説していきます!

MySQLとは

MySQLとは、最も普及しているオープンソースのSQLデータベース管理システムです。

オープンソースで無償で導入することができ、大容量のデータでも高速で動作することが可能なため、実用性の高いデータベースの1つとなります。

世界的にも有名で、多くの企業でもMySQLが使用されており、PHPでもデータベースはMySQLを使用する頻度が高いと言えるでしょう。

また、MySQLはWindows、Mac、Linuxなどさまざまなプラットフォームで動作が可能で、自由にカスタマイズも可能です。

MySQLのについての詳細や、MySQLをインストールする方法などについては以下の記事で詳しく解説しています!

【超初心者向け】MySQLとは?どこよりもわかりやすく解説
更新日 : 2019年6月26日
【初心者向け】MySQLのインストール方法について徹底解説!
更新日 : 2018年12月25日

また、MySQLのコマンド一覧については以下のページで紹介されています。
https://itsakura.com/mysql-command

PHPでMySQLの導入やプラグインについては、以下のページで解説しています。
http://php.net/manual/ja/set.mysqlinfo.php

MySQLのテーブルを作成しよう

まずは下準備として、実際にMySQLのテーブルを作成してみましょう。

ここではMacでPHPの開発環境である「MAMP」をインストールして、MySQLを動かしています。

以下はMacのターミナルでMySQLを起動する手順の一例となります。

MySQLのディレクトリに移動
$ cd /Applications/MAMP/Library/bin/

MySQLを起動する
$ ./mysql -u root -p

パスワードを入力
$ xxxx

データベースの選択
mysql>use xxxx

MySQLを起動して使用するデータベースを選択したら、テーブルを作成します。

テーブルを作成するには以下のようにCREATE文を使用します。

CREATE TABLE テーブル名(
  カラム名1 型情報,
  カラム名2 型情報,
  ・・・
)

以下のSQLクエリを実行します。

CREATE TABLE fruits_table (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    fruits VARCHAR(32),
    value INT
);

続けて、INSERT文を使用してテーブルの中にデータを挿入します。

INSERT INTO fruits_table (fruits, value) VALUES ("apple", 100);
INSERT INTO fruits_table (fruits, value) VALUES ("orange", 80);
INSERT INTO fruits_table (fruits, value) VALUES ("melon", 500);
INSERT INTO fruits_table (fruits, value) VALUES ("pineapple", 700);

データを挿入したら、以下のSELECT文を実行してテーブルの中を確認してみます。

mysql> SELECT * FROM fruits_table;

以下のように表示されたら成功です!

+----+-----------+-------+
| id | fruits    | value |
+----+-----------+-------+
|  1 | apple     |   100 |
|  2 | orange    |    80 |
|  3 | melon     |   500 |
|  4 | pineapple |   700 |
+----+-----------+-------+
4 rows in set (0.00 sec)

MySQLに接続してみよう

MySQLに接続する方法としてはmysql_connect関数を使用する方法が一般的でしたが、mysql_connect関数はPHP5.5.0より非推奨となりPHP7.0では削除されました。

そのため、PHP7以降でMySQLに接続するためには、

手続き型のmysqli_connectで接続する方法、
オブジェクト指向型のmysqli::__constructで接続する方法、

が一般的です。

mysqli_connectの使い方

手続き型のmysqli_connectは、以下のように記述します。

書き方:

mysqli_connect(string $ホスト名, string $ユーザ名, string $パスワード, string $データベース名 [, string $ポート [, string $ソケット]]);

引数:
MySQLサーバーのホスト名、ユーザー名、パスワード、接続するデータベース名などを指定します。

返り値:
MySQL接続時のオブジェクトを返します。

mysqli_connectを使用してMySQLに接続するサンプルです。

サンプルプログラム:

<?php

// 接続
$link = mysqli_connect('localhost', 'root', 'passwd', 'my_app');
 
if (!$link) {
    echo "データベース接続失敗" . PHP_EOL;
    echo "errno: " . mysqli_connect_errno() . PHP_EOL;
    echo "error: " . mysqli_connect_error() . PHP_EOL;
    exit;
}
 
echo 'データベース接続成功';
 
// 切断
mysqli_close($link);

?>

接続に失敗すると、接続時のオブジェクトにエラー内容が付加されるため、「mysqli_connect_errno」「mysqli_connect_error」関数などでエラー情報を確認することができます。

接続時のオブジェクトは、最後にmysqli_closeを使用して切断する必要があります

mysqli::__constructの使い方

MySQLに接続するもう一つの方法として、オブジェクト型のmysqli::__constructを使用する方法があります。

MySQLの接続は、オブジェクト型での接続方法が推奨されています。

mysqli::__constructは、以下のように記述します。

書き方:

mysqli::__construct(string $ホスト名, string $ユーザ名, string $パスワード, string $データベース名 [, string $ポート [, string $ソケット]]);

引数の指定は、手続き型のmysqli_connectと同様となります。

mysqli::__constructを使用してMySQLに接続するサンプルです。

サンプルプログラム:

<?php

// 接続
$mysqli = new mysqli('localhost', 'root', 'passwd', 'my_app');
 
//接続状況の確認
if (mysqli_connect_errno()) {
    echo "データベース接続失敗" . PHP_EOL;
    echo "errno: " . mysqli_connect_errno() . PHP_EOL;
    echo "error: " . mysqli_connect_error() . PHP_EOL;
    exit();
}
 
echo 'データベース接続成功';
 
// 切断
$mysqli->close();

?>

SQLクエリを実行してみよう(query)

MySQLのクエリを実行するには、queryを使用します。

MySQLへの接続から、INSERT文でデータを挿入するサンプルプログラムを紹介します。

サンプルプログラム:

<?php

// 接続
$mysqli = new mysqli('localhost', 'root', 'passwd', 'my_app');
 
//接続状況の確認
if (mysqli_connect_errno()) {
    echo "データベース接続失敗" . PHP_EOL;
    echo "errno: " . mysqli_connect_errno() . PHP_EOL;
    echo "error: " . mysqli_connect_error() . PHP_EOL;
    exit();
}
 
// データを挿入する
$sql = "INSERT INTO fruits_table (fruits, value) VALUES ('strawberry', 800)";
 
$result = $mysqli->query($sql);
 
if (!$result) {
    echo 'INSERTが失敗しました。'.mysqli_error();
}else{
	echo 'INSERTが成功しました';
}
 
// 切断
$mysqli->close();

?>

「SELECT * FROM fruits_table;」を実行し、以下のようにテーブルにデータが追加されていれば成功です!

mysql> SELECT * FROM fruits_table;
+----+------------+-------+
| id | fruits     | value |
+----+------------+-------+
|  1 | apple      |   100 |
|  2 | orange     |    80 |
|  3 | melon      |   500 |
|  4 | pineapple  |   700 |
|  5 | strawberry |   800 |
+----+------------+-------+
5 rows in set (0.00 sec)

SQLクエリを以下のようにUPDATE文に変更すると、データの更新を行うことができます。

$sql = "UPDATE fruits_table SET value=1000 WHERE id=5";

「SELECT * FROM fruits_table;」で確認します。

mysql> SELECT * FROM fruits_table;
+----+------------+-------+
| id | fruits     | value |
+----+------------+-------+
|  1 | apple      |   100 |
|  2 | orange     |    80 |
|  3 | melon      |   500 |
|  4 | pineapple  |   700 |
|  5 | strawberry |  1000 |
+----+------------+-------+
5 rows in set (0.00 sec)

idが5のデータのvalueの値が更新されました。

DELETE文に変更すれば、データが削除されます。

$sql = "DELETE FROM fruits_table WHERE id=5";

確認します。

mysql> SELECT * FROM fruits_table;
+----+------------+-------+
| id | fruits     | value |
+----+------------+-------+
|  1 | apple      |   100 |
|  2 | orange     |    80 |
|  3 | melon      |   500 |
|  4 | pineapple  |   700 |
|  5 | strawberry |  1000 |
+----+------------+-------+
5 rows in set (0.00 sec)

idが5のデータが削除されました。

PDOを使ってみよう

PDOとは

PDOとは、PHP標準のデータベース接続クラスです。

データベース管理システムにはOracleDB2のような製品から、MySQLPostgreSQLのようにオープンソースで無償のものまで、様々な種類があります

ここまで解説してきたmysqli_connectやmysqli::__constructは、MySQLだけに使用できるものです。

それに対しPDOは、PDOオブジェクトを作成する時の引数によって、すべてのデータベース管理システムで使用することができます。

接続してみよう

PDOは、以下のように記述します。

書き方:

PDO::__construct(string $データソース名 [, string $ユーザ名 [, string $パスワード [, array $オプション ]]])

引数:
第一引数にデータソース名を指定します。MySQLであれば'mysql:host=ホスト名;dbname=データベース名'のような形式で指定します。

第二引数にユーザ名、第三引数にパスワードを指定します。

返り値:
MySQL接続時のオブジェクトを返します。

PDO::__constructを使用してMySQLに接続するサンプルです。

サンプルプログラム:

<?php

try{
	// 接続
	$db = new PDO('mysql:host=localhost;dbname=my_app', 'root', 'passwd');
	echo 'データベース接続成功';
	// 切断
	$db = null;
} catch(PDOException $e){
    echo "データベース接続失敗" . PHP_EOL;
	echo $e->getMessage();
	exit;
}

?>

PDO::__constructは、接続に失敗するとPDOExceptionを投げるのでtry-catchで対処をしています。

切断は接続時のオブジェクトにnullを代入するだけです。

try-catchについては、こちらの記事で詳しく解説しています!

SQLクエリを実行してみよう

SQLクエリを実行するには、execを使用します。

INSERT文を実行するサンプルです。

サンプルプログラム:

<?php

try{
	// 接続
	$db = new PDO('mysql:host=localhost;dbname=my_app', 'root', 'passwd');

	// データを挿入する
	$sql = "INSERT INTO fruits_table (fruits, value) VALUES ('strawberry', 800)";
	$result = $db->exec($sql);

	if (!$result) {
	    echo 'INSERTが失敗しました。'.mysqli_error();
	}else{
		echo 'INSERTが成功しました';
	}

	// クローズ
	$db = null;
} catch(PDOException $e){
    echo "データベース接続失敗" . PHP_EOL;
	echo $e->getMessage();
	exit;
}

?>

確認すると、データが挿入されています。

mysql> SELECT * FROM fruits_table;
+----+------------+-------+
| id | fruits     | value |
+----+------------+-------+
|  1 | apple      |   100 |
|  2 | orange     |    80 |
|  3 | melon      |   500 |
|  4 | pineapple  |   700 |
|  6 | strawberry |   800 |
+----+------------+-------+
5 rows in set (0.00 sec)

まとめ

ここでは、PHPでMySQLを使用するために、

  • MySQLとは
  • MySQLの起動からテーブルを作成する方法
  • MySQLに接続する方法
  • SQLクエリを実行してデータを挿入、更新、削除する方法
  • PDOを使用する方法

などについて解説しました。

MySQLはさまざまなシステムやアプリケーションで使用されていますので、仕組みをよく理解しておきましょう!

もしMySQLの使い方を忘れてしまったら、この記事を思い出してくださいね。

LINEで送る
Pocket

「プログラミング、右も左もわからない…」という方にオススメ

当プログラミングスクール「侍エンジニア塾」では、これまで6000人以上のエンジニアを輩出してきました。

その経験を通してプログラミング学習に成功する人は、「目的目標が明確でそれに合わせた学習プランがあること」「常に相談できる人がそばにいること」「自己解決能力が身につくこと」この3つが根付いている傾向を発見しました。

侍エンジニア塾は上記3つの成功ポイントを満たすようなサービス設計に磨きをかけております。

cta_under_bnr

「自分のスタイルや目的に合わせて学習を進めたいな」とお考えの方は、ぜひチェックしてみてください。

書いた人

ヤマシタ

システムエンジニアとして10年勤務→フリーランスへ。現在は侍ブログ編集部としてこれまでに200記事以上の記事を執筆。
大規模システム開発からWebアプリ開発まで経験あり。最近ではPythonの機械学習に挑戦中。