PHPプログラミング

最終更新日:
公開日:

レシピ

データベース MySQL / MariaDB

mysqliを使ってMySQL/MariaDBのデータベースへ接続

MySQLiの紹介とMySQLとの違い、データベースへの接続方法までを解説します。

この記事のポイント

  • mysqliについて知る
  • mysqliを使ってMySQL/MariaDBのデータベースに接続する

目次

MySQLiってなに?

MySQLiとは「MySQL improved extension」の略で、PHPからMySQL/MariaDBデータベースを操作するためのインターフェースを提供する、PHPの拡張機能です。
以前は「mysql_query」などのMySQL系(iがつかない)の関数が使われていましたが、PHP5.5以降では非推奨となりました。
その代替えとなったのがMySQLiです。

「MySQL」はデータベース名とPHPの関数のどちらを指すか紛らわしいため、以降はPHPのMySQL系オブジェクトや関数は小文字で「mysql」と記述し、MySQLiは「mysqli」と記述します。

mysqlとの違いは、オブジェクト指向の記述に対応したことです。
なのでmysqliを使うにはまずオブジェクト(インスタンス)を生成し、メソッドを使ってSQLの実行をする形になります。

mysqliオブジェクトのインスタンスを生成するコード例

// インスタンスを生成
$mysqli = new mysqli( 'host_name', 'user_name', 'password', 'database_name');

// SQLクエリの実行
$mysqli->query("SELECT * FROM test_table");

ただし、mysqliは移行しやすいように手続き関数を使った方法も用意されています。
詳しくは後述します。

mysql系からmysqli系への移行方法

基本的にmysqlで使っていたSQLはそのままmysqliでも使用できます。
また、従来の手続き型の関数も用意されており、関数名も「mysql」の後ろに「i」をつけた記述の変更で対応できるようになっています。

例えば、クエリを実行する「mysql_query」には「mysqli_query」、データベースへの接続に使うmysql_connectにはmysqli_connect、接続を閉じる「mysql_close」には「mysqli_close」というように、それぞれ対応した関数が用意されています。
そのため、コードをオブジェクト指向に対応する形へ書き直さなくても、従来の関数名に「i」を追加する形で移行することも可能です。

ただし1つだけ注意しなければならないのは、mysqlとmysqliでは受け取るパラメータの順番が異なることです。

mysqlのコード例

// DBサーバーへ接続
$db_link = mysql_connect( 'host_name', 'user_name', 'password');

// DBへ接続
mysql_select_db( 'database_name', $db_link);

// クエリの実行
$data = mysql_query( 'SELECT * FROM test_table', $db_link);

// DBとの接続解除
mysql_close($db_link);

mysqliのコード例

// DBサーバーへ接続
$db_link = mysqli_connect( 'host_name', 'user_name', 'password');

// DBへ接続 (パラメータの順番が違う)
mysqli_select_db( $db_link, 'database_name');

// クエリの実行 (パラメータの順番が違う)
$data = mysqli_query( $db_link, 'SELECT * FROM test_table');

// DBとの接続解除
mysqli_close($db_link);

mysql_select_dbmysqli_select_dbのパラメータ、及びmysql_querymysqli_queryのパラメータは順が逆になっています。
このような違いがあるので注意してください。

データベースへ接続

それでは早速mysqliを使ってデータベースへ接続してみましょう。
仮に、次のようなデータベースがあったとします。

mysqliは「オブジェクトを使った書き方」と「関数を使った書き方」の2通りあるため、それぞれ解説していきます。
MySQL、MariaDBのどちらも同じ方法で接続できるため、データベースの違いを意識する必要はありません。

オブジェクトを使った書き方

まずはオブジェクト型の接続方法をみていきます。
手続き型で接続を行いたい場合は、ここをスキップして「手続き型」へ進んでください。

コード

// データベースへ接続
$mysqli = new mysqli( 'host_name', 'user_name', 'password', 'database_name');

// 接続エラーの確認
if( $mysqli->connect_errno ) {
	echo $mysqli->connect_errno . ' : ' . $mysqli->connect_error;
}

// 接続解除
$mysqli->close();

解説

最初にmysqliクラスのインスタンスを生成して接続を行います。
ここで4つのパラメータを「ホスト」「ユーザー名」「パスワード」「データベース名」の順に指定します。

続くif文で、connect_errnoプロパティにエラー番号が入っているかで接続エラーが起こっているか判定を行います。
エラー番号が入っていなければif文をスキップし、入っていたらエラー内容を出力します。

最後にcloseメソッドを呼び出し、データベースとの接続を解除して終了です。

関数を使った書き方

手続き型の関数でデータベースに接続する場合は、次のようなコードになります。
全体の流れはオブジェクト型と同じです。

コード

// データベースへ接続
$db_link = mysqli_connect( 'host_name', 'user_name', 'password', 'database_name');

// 接続エラーの確認
if( mysqli_connect_errno($db_link) ) {
	echo mysqli_connect_errno($db_link) . ' : ' . mysqli_connect_error($db_link);
}

// 接続解除
mysqli_close($db_link);

解説

まずはmysqli_connect関数で4つのパラメータ、「ホスト」「ユーザー名」「パスワード」「データベース名」を指定して接続を行います。

もし接続エラーがあった場合、mysqli_connect_errno関数がエラー番号を返してくれるので、if文の中でエラー番号と内容を出力します。
正常に接続できた場合は返り値が整数「0」のため、if文はスキップされます。

最後にmysqli_close関数で接続を解除して終了です。