第12章 PHPとデータベースの連携
12.4 MariaDBサーバと接続してみよう
PHPからデータベースを利用するには、必ずMariaDBサーバへ接続する必要があります。
そして、MariaDBに接続してから、利用するデータベースの選択して初めてデータの検索(取得)や更新が行えるようになります。
上記の操作を行うために、以下の「mysqli関数」を本節で利用します。
- MariaDBサーバへ接続:mysqli_connect関数
- データベースを選択:mysqli_select_db関数
- MariaDBサーバ接続の切断:mysqli_close関数
12.4.1 MariaDBサーバへ接続してみよう
MariaDBサーバへ接続するには「mysqli_connect関数」を利用することで行えます。
書式:MariaDBサーバへ接続
第1引数のサーバには「ホスト名(localhost)」や「IPアドレス(MariaDBインストール先)」を設定します。
第2引数のユーザーIDには「MariaDBに登録されているユーザーID」を設定します。
第3引数のパスワードには第2引数のユーザーIDの「パスワード」を設定します。
上記3つの情報で関数を呼び出すと、戻り値として「接続情報」を受け取ります。この接続情報は一部のmysqli関数を使用する場合に、必要になる重要な情報になります。
MariaDBサーバへ接続し切断するプログラム
PHPからMariaDBサーバへ接続して切断し、接続情報を画面に表示して確認します。
ソース・フォルダー: myproj_basic/ch12
パッケージ: mariaDBConnect.php
アクセスURL:http://localhost/myproj_basic/ch12/mariaDBConnect.php
mariaDBConnect.php
解説
2~4行目でMariaDBサーバへの接続に必要な各情報を変数に設定しています。
7行目でmysqli_connect関数の引数に各情報を設定して、MariaDBサーバへ接続しています。変数$linkに代入される戻り値が「接続情報」になります。
図 12.4.1:MariaDBサーバへ接続
11行目ではmysqli_close関数の引数に$link(接続情報)を設定して、MariaDBサーバから切断しています。
図 12.4.2:MariaDBサーバの切断
18行目では接続情報(localhost via TCP/IP)を画面に表示しています。11行目でこのサーバへ接続を切断しDB自体は使用不可能になっていますが、9行目で接続情報のテキストを変数$link_infoに代入したのでそのまま表示できます。
12.4.2 データベースを選択してみよう
MariaDBサーバに接続しただけでは、まだデータの検索(取得)や更新などの操作が行えません。なぜならMariaDBサーバ内には複数のデータベースが存在しており、どれを対象にアクセスして良いのか分からないからです。
図 12.4.3:MariaDBサーバ内には複数のデータベースがある
プログラムでデータの操作を行うには、「mysqli_select_db関数」を使ってデータベースを選択して初めて行えます。また、1度データベースを選択した後でも、別のデータベースに切り替えることも可能です。
書式:データベースの選択
引数の$変数はMariaDBサーバへ接続した際の、戻り値「接続情報(ID)」を設定します。
データベースを選択するプログラム
MariaDBサーバへ接続後、データベースを選択します。
ソース・フォルダー: myproj_basic/ch12
パッケージ: databaseChoice.php
アクセスURL:http://localhost/myproj_basic/ch12/databaseChoice.php
databaseChoice.php
解説
このプログラムは前項のmariaDBConnect.phpに、データベースを選択する処理が追加されているだけです。
5行目に変数$dbに選択するデータベース名「itemdb」を設定します。※12.2で準備したデータベースです。
14行目でmysqli_select_db関数の引数に$link(接続情報)と$db(データベース名)を設定して、利用するデータベースを選択しています。この処理を行うと選択したデータベースを対象に、データの操作を行うことができるようになります。
図 12.4.4:データベースを選択
実行結果を見ても前項のプログラムと一緒のため、本当にデータベースを選択されたのかは分かりません。データベースへのアクセスが、正しく行われたのか確認する方法について次項で学習します。
12.4.3 データベースへのアクセスを安全に行う方法
前項までのプログラムでは、データベースにアクセスするための情報が必ず正しいことが前提になっていました。しかし、別のシステムであるMariaDBを利用している以上、設定が変更される可能性もあります。またプログラムの記述を間違ってしまうことも当然あります。
mysqli関数は操作に失敗するとエラーメッセージを出したり、戻り値にfalseを返して失敗を教えてくれるものがあります。全ての関数記述後に条件判定を追加しても良いですが、大変な手間になってしまいます。そこで以下の書式で示す「or」と「die関数」を使って、戻り値のある関数の失敗(false)を判定する仕組みを利用します。
書式:関数の安全な使い方
「or」はこれまで目にしてきた論理演算子です。条件式で使われるのが一般的な使い方ですが、通常の処理にも使うことができます。この書式では左側の「処理失敗の戻り値がfalseの関数」の戻り値が「true(false以外)」なら条件を満たすため、右側の処理は行いません。逆に「false」ならば右側のdie関数の処理を行うことになります。
そして「die関数」は引数のメッセージを出力した後に、プログラムを強制終了させるものです。強制終了させる仕組みはexit関数と同じになります。
mysqli関数を安全に使用するプログラム
mysqli関数に「or die関数」を組み合わせて、不正な情報の場合処理が強制終了されることを確認します。
ソース・フォルダー: myproj_basic/ch12
パッケージ: checkMariaDBMethod.php
アクセスURL:http://localhost/myproj_basic/ch12/checkMariaDBMethod.php
checkMariaDBMethod.php
実行結果(各エラーの場合)
※MariaDB サーバの切断は、接続に成功できれば基本的に失敗しません。上記の結果はわざとクローズ処理を 2 回行ったケースになります。
解説
このプログラムは前項で作成したdatabaseChoice.phpのmysqli関数に、「or die関数」処理を追加したものになっています。その箇所は13,16,22行目になります。各関数の処理に失敗するとdie関数が処理されメッセージを画面に表示してプログラムを強制終了させます。
この「or die関数」の仕組みはmysqli関数だけでなく、処理失敗の戻り値が「false」となる関数ならば何にでも利用することが可能になります。
今回は処理の都合上(エラーで強制終了)、20行目のHTML文章<meta>タグの出力を行わない場合があります。そのため2行目でheader関数を使ってファイルタイプと文字コードの設定をPHP側で行っています。この設定を行うことで、「die関数」で出力したメッセージが文字化けせずに出力できます。
図 12.4.5:header関数を使わないと文字化けする
header関数についてheader関数を利用する場合、setCookie関数やsession_start関数と同じように「HTML出力よりも必ず先に記述しなければならない」ルールがあります。
またheader関数は本項で扱ったように、「ファイルのタイプや文字コード」を定義できるものでもありますが、引数の情報次第で画面遷移を行わせることも可能になる便利な関数でもあります。
上記のように記述すると指定したURLへ画面遷移させることができます。exit関数を一緒に記述するのは、それ以降の処理が実行されないようにするためです。
それでは、次節より選択したデータベースの本格的な操作方法(検索、更新)について学習していきます。