スライドショー

初心者でも安心!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

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

ヤマシタ

エンジニア歴10年のフリーランスエンジニア。ITに関わるさまざまなコンテンツの企画・制作も行っています。
ITに関してはノウハウ系、ライフハック系、トレンド系など、200本以上の執筆経験があります。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説