PHPプログラミング

ベストプラクティス

mysqliを使ってデータベースへ接続

  • このエントリーをはてなブックマークに追加

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

MySQLiってなに?

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

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

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

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

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

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_link = mysql_connect( 'host_name', 'user_name', 'password');
mysql_select_db( 'database_name', $db_link);
$data = mysql_query( 'SELECT * FROM test_table', $db_link);
mysql_close($db_link);

移行後のMySQLiで記述したコード

$db_link = mysqli_connect( 'host_name', 'user_name', 'password');
mysqli_select_db( $db_link, 'gc_database');
$data = mysqli_query( $db_link, 'SELECT * FROM test_table');
mysqli_close($db_link);

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

データベースへ接続

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

データベース「gc_database」

MySQLiには「オブジェクト型」と「手続き型」の2通りがあるため、それぞれの使い方をみていきましょう。


オブジェクト型

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

コード

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

// 接続エラーの確認
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', 'gc_database');

// 接続エラーの確認
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関数で接続を解除して終了です。

  • このエントリーをはてなブックマークに追加