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

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

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

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

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

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

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

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

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

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

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

なお、次の記事ではそもそもPHPとはどんなプログラミング言語なのか、その特徴をできることや将来性も交え詳しく紹介しているので良ければ参考にしてください。

→ PHPとは何かわかりやすく解説!できることや将来性、学習方法も紹介

目次

MySQLとは

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

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

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

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

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

【超初心者向け】MySQLとは?どこよりもわかりやすく解説
更新日:2024年11月7日
【Windows/Mac】MySQLのインストール~環境構築~接続【簡単】
更新日:2024年10月31日

また、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の使い方を忘れてしまったら、この記事を思い出してくださいね。

この記事を書いた人

システムエンジニアとして10年勤務→フリーランスへ。
大規模システム開発からWebアプリ開発まで経験あり。最近ではPythonの機械学習に挑戦中。プログラミング初学者に向けてわかりやすく、ためになるコンテンツ作りを心がけています。

目次