Search

検索したいワードを入力してください

2019年04月10日

PHPで簡単にMySQLを使う|接続からレコード操作まで

MySQLを使用したWEBアプリケーションを開発している人は多いのではないでしょうか。この記事では、PHPでMySQLを操作する基本的な方法を紹介します。どんな関数やメソッドを使えば良いかよく分からないという方は、ぜひこの記事を読んでみてください。

MySQLとは?

MySQLは、現在世界で最も普及している関係データベース管理システムです。関係データベース管理システムでは、表(テーブル)の形式でデータを保存したり、保存したデータを更新、削除したり、複数のテーブルを関連づけてデータを取得することなどができます。

それでは、PHPでMySQLを操作する方法を見ていきましょう。

PHPでMySQLに接続するには?

PHPでMySQLに接続する方法はいくつかあり、手続き型で接続する方法と、オブジェクト指向型で接続する方法に分けられます。ここでは、手続き型で接続する方法としてmysqli_connect、オブジェクト指向型で接続する方法としてmysqli::__constructを紹介します。

mysqli_connectで接続してみよう!

まずは、PHPでMySQLに接続してから接続を閉じるまでのサンプルコードを見ていきましょう。ここで記述されているコードは、接続に関しての処理だけです。データの操作については後述します。


$host = 'localhost';
$username = 'root';
$password = '';

//MySQLサーバーに接続する
$mysqli = mysqli_connect($host, $username, $password);

//接続時にエラーが生じていないか確認する
if (mysqli_connect_errno()) {
echo 'CONNECTION ERROR';
} else {
//クライアントの文字セットを設定する
mysqli_set_charset($mysqli, 'utf8');
}

//データを操作する処理を記述する

//MySQLサーバーとの接続を閉じる
mysqli_close($mysqli);

mysqli_connectを実行すると、MySQLサーバーへの接続を表すオブジェクトのインスタンスが作成され$mysqliに代入されます。mysqli_connectの引数は左から順に、MySQLサーバーのホスト名またはIPアドレス、MySQLのユーザー名、MySQLのパスワードです。

ここでは省略していますが、4つ目の引数でデータベースを指定することができます。

mysqli_connect_errnoは、直近のMySQLサーバーへの接続時にエラーが発生した場合にエラーコード(発生していない場合は0)を返します。接続が成功したら、クライアントの文字セットを設定しています。

クライアントとは、MySQLを使用しているPHPのことで、PHP側とMySQL側で文字セットが異なると文字化けが発生してしまいます。

最後には必ずMySQLサーバーとの接続を閉じましょう。

手続き型の書き方では、接続時に作成したインスタンスをほぼ毎回引数として渡す必要があります。次に紹介するオブジェクト指向型の書き方を使用すると、毎回引数を渡す必要が無くなります。

mysqli::__constructで接続してみよう!


$host = 'localhost';
$username = 'root';
$password = '';

//MySQLサーバーに接続する
$mysqli = new mysqli($host, $username, $password);

//接続時にエラーが生じていないか確認する
if ($mysqli->connect_errno) {
echo 'CONNECTION ERROR';
} else {
//クライアントの文字セットを設定する
$mysqli->set_charset('utf8');
}

//データを操作する処理を記述する

//MySQLサーバーとの接続を閉じる
$mysqli->close();

処理の内容は上記のmysqli_connectのサンプルコードと同じです。オブジェクト指向型の書き方なので、最初にnewを使用してMySQLサーバーへの接続を表すインスタンスを生成します。コンストラクタの引数はmysqli_connectと同じです。

後の処理はメソッドを使用しながら行います。注意すべきは、エラーコードの取得はプロパティから行うということです。

手続き型のmysqli_connectとオブジェクト指向型のmysqli::__constructで、接続時に生成されるのはどちらもmysqliクラスのインスタンスです。ここから先のサンプルコードは、オブジェクト指向型で記述していきます。

MySQLのデータを操作してみよう!

データベースを作成してみよう!

MySQLサーバーに接続できたら、まずはデータベースを作成していきます。ここからは、MySQLに命令をするSQLを記述していくことになります。順を追ってサンプルコードを見ていきましょう。


//MySQLサーバーに接続する

//MySQLサーバーへの接続時にエラーが生じていないか確認する
//エラーが生じていなければクライアントの文字セットを設定する

//データベースを作成する
$mysqli->query('CREATE DATABASE IF NOT EXISTS sample_db');

//SQLの実行時にエラーが生じていないか確認する
if ($mysqli->error_list !== []) {
var_dump($mysqli->error_list);
}

//MySQLサーバーとの接続を閉じる

まず、SQLの説明です。「CREATE DATABASE sample_db」でsample_dbという名前のデータベースを作成できます。

mysqli::queryによってSQLを実行することができます。このときにエラーが発生していればmysqli::$error_listというプロパティに配列で格納されます。

きちんと作成できているか確認するには、phpMyAdminを使用すると便利です。phpMyAdminでは、MySQLの操作をGUIで行うことが可能です。XAMPPやMAMPといったPHPの開発環境であれば同梱されていますので、活用してみてください。

テーブルを作成してみよう!

テーブルを作成する前にテーブルの構成について説明します。テーブルは、データの名前(属性)ごとの列であるカラム、そして、1行ごとのデータの集まりであるレコードによって構成されています。そして、セル1つ1つは「フィールド」と呼ばれています。

カラム1カラム2
レコード1フィールドフィールド
レコード2フィールドフィールド

それでは、作成したsample_dbの中にテーブルを作成していきます。例として、名簿を作成していきます。注意すべきは、接続時にデータベースを指定することです。mysqli::__constructの4番目の引数に'sample_db'を渡します。


$host = 'localhost';
$username = 'root';
$password = '';
$db = 'sample_db';

$mysqli = new mysqli($host, $username, $password, $db);

//MySQLサーバーへの接続時にエラーが生じていないか確認する
//エラーが生じていなければクライアントの文字セットを設定する

//テーブルを作成する
$mysqli->query('CREATE TABLE people (
id INT(2) AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
age INT(3)
)');

//SQLの実行時にエラーが生じていないか確認する

//MySQLサーバーとの接続を閉じる

「CREATE TABLE people」でpeopleという名前のテーブルを作成することができます。「people」以降で、テーブルにカラムを設定していきます。「AUTO_INCREMENT PRIMARY KEY」は、「id」を主キーとするための設定です。「name」、「age」にはそれぞれ文字列、整数を保存するための設定をしておきます。()の中の数字は最大文字数または最大桁数です。

レコードを挿入してみよう!


//MySQLサーバーに接続する

//MySQLサーバーへの接続時にエラーが生じていないか確認する
//エラーが生じていなければクライアントの文字セットを設定する

$name = '鈴木 太郎';
$age = 17;

//テーブルにデータを挿入する
$mysqli->query("INSERT INTO people (
name, age
) VALUES (
'$name', '$age'
)");

//SQLの実行時にエラーが生じていないか確認する

//MySQLサーバーとの接続を閉じる

「INSERT INTO」の後にテーブル名とカラム名、「VALUES」の後に挿入するデータを記述します。注意すべきは、「id」は「AUTO_INCREMENT」を設定していてMySQLが自動で番号を割り振るため、SQLに記述する必要が無いこと、変数を使う場合はシングルクオーテーションで囲むことです。

また、PHPでは、シングルクオーテーションを囲むには、ダブルクォーテーションを使用する必要があることにも注意しましょう。phpMyAdminで結果を確認してみましょう。

レコードを取得して表示してみよう!


//MySQLサーバーに接続する

//MySQLサーバーへの接続時にエラーが生じていないか確認する
//エラーが生じていなければクライアントの文字セットを設定する

//peopleテーブルのレコードをすべて取得するSQLを実行する
$result = $mysqli->query('SELECT name, age FROM people');

//結果を1レコードずつ表示する
while ($row = $result->fetch_assoc()) {
echo 'name:',$row['name'],', age:',$row['age'];
}

//SQLの実行時にエラーが生じていないか確認する

//MySQLサーバーとの接続を閉じる

「SELECT」の後には取得するカラム名、「FROM」の後には取得するテーブル名を記述します。「SELECT name, age FROM people」では、peopleテーブルのレコードをすべて取得しますが、「SELECT name, age FROM people WHERE age = 17」のように続けると条件に一致するレコードを取得することができます。

mysqli::queryで「SELECT」を実行すると、mysqli_resultクラスのインスタンスが返されます。このインスタンスのメソッドであるmysqli_result::fetch_assocを実行すると1レコードずつ、カラム名をキーとする連想配列として取得できます。

レコードを更新してみよう!


//MySQLサーバーに接続する

//MySQLサーバーへの接続時にエラーが生じていないか確認する
//エラーが生じていなければクライアントの文字セットを設定する

//レコードを更新する
$mysqli->query("UPDATE people SET age = age + 1 WHERE name = '鈴木 太郎'");

//SQLの実行時にエラーが生じていないか確認する

//MySQLサーバーとの接続を閉じる

「UPDATE」の後には更新するテーブル名、「SET」の後には更新するカラム名と更新後のデータを記述します。ここでは、「鈴木 太郎」という方の年齢を1だけ加算しています。phpMyAdminで結果を確認してみましょう。

レコードを削除してみよう!


//MySQLサーバーに接続する

//MySQLサーバーへの接続時にエラーが生じていないか確認する
//エラーが生じていなければクライアントの文字セットを設定する

//レコードを削除する
$mysqli->query("DELETE FROM people WHERE name = '鈴木 太郎'");

//SQLの実行時にエラーが生じていないか確認する

//MySQLサーバーとの接続を閉じる

「DELETE」の後には削除するレコードが存在するテーブル名、「WHERE」の後には削除するレコードの条件を記述します。ここでは、「name」が「鈴木 太郎」であるレコードを削除しています。phpMyAdminで結果を確認してみましょう。

今回はMySQLの基本的な操作方法を紹介しました!

今回紹介したのは、一般的に「CRUD」と呼ばれる基本的な操作です。Cは「CREATE」、Rは「READ」、Uは「UPDATE」、Dは「DELETE」の略です。PHPを使用しているときに限らずよく登場する言葉なのでこれを機に覚えておきましょう。

ここでは紹介しませんでしたが、ユーザーが入力したデータを含めてSQLを実行する際には、SQLインジェクションを防ぐためにユーザーが入力したデータをPHPでエスケープするか、プリペアドステートメントを使用する必要があります。

ユーザーが入力したデータを扱うときは、これらの方法も学んでさらなるPHPのスキルアップを目指しましょう。

【PR】多くの人がプログラミングを諦めてしまう理由をご存知ですか?



近年プログラミングを勉強する人が増えています。

プログラミング学習者の多くは独学から取り組もうとしますが、だいたい80%ほどは3ヶ月も続かずに諦めてしまいます。早い人は1日目で。

多くの人がプログラミングを独学しようとして諦める理由は、次の3つ。
●モチベーションが維持できない
●エラーの原因・解決方法が分からない
●どう学習すればよいか分からない

TechBoostというプログラミングスクールでは、みんなと一緒にプログラミングをするのでモチベーションの維持ができ、分からないことがあればマンツーマンで教えてくれ、徹底的に研究された初心者向けの教材が揃っています。

TechBoostを卒業後、実際にエンジニアとして転職した方もいるほど。

本気でプログラミングを学びたい方は、一度無料のカウンセリングでご相談ください。プログラミングを嫌いになる前に。

tech boostについて

オーダーメイド型の学習コンテンツを提供する「tech boost」 は、エンジニアのキャリア支援に特化したサービスを複数展開している株式会社Branding Engineerが運営しているプログラミングスクールです。最短3ヶ月間で、未経験から『プログラミングの基礎』、『実際に業務で必要となるスキル』、『今のトレンドとなっている知識』まで学べ、ご希望の方にはプロのキャリアアドバイザーによる就業支援を行うことができます。

tech boost卒業生インタビュー

tech boostの卒業生の声を聞きました。あなたがプログラミングを学びたい理由を、一度考えてみてください。
営業→Javaエンジニア→Rubyエンジニアと転向し、第一志望のFinTech企業で働く山下さん
元営業、ビジネスのわかるエンジニアを目指す菅原さん
サンフランシスコに交換留学し、シリコンバレーのVCでインターン中の梅本さん
予備校の営業から半年でエンジニア転職を果たした小田島さん

tech boostの口コミ



Related