第12章 PHPとデータベースの連携

12.4 MySQLサーバと接続してみよう

PHPからデータベースを利用するには、必ずMySQLサーバへ接続する必要があります。そして、MySQLに接続してから、利用するデータベースの選択して初めてデータの検索(取得)や更新が行えるようになります。
上記の操作を行うために、以下の「mysqli関数」を本節で利用します。

  • MySQLサーバへ接続:mysqli_connect関数
  • データベースを選択:mysqli_select_db関数
  • MySQLサーバ接続の切断:mysqli_close関数

12.4.1 MySQLサーバへ接続してみよう

MySQLサーバへ接続するには「mysqli_connect関数」を利用することで行えます。

書式:MySQLサーバへ接続

第1引数のサーバには「ホスト名(localhost)」「IPアドレス(MySQLインストール先)」を設定します。
第2引数のユーザーIDには「MySQLに登録されているユーザーID」を設定します。
第3引数のパスワードには第2引数のユーザーIDの「パスワード」を設定します。
上記3つの情報で関数を呼び出すと、戻り値として「接続情報」を受け取ります。この接続情報は一部のmysqli関数を使用する場合に、必要になる重要な情報になります。

MySQLサーバへ接続し切断するプログラム

PHPからMySQLサーバへ接続して切断し、接続情報を画面に表示して確認します。

ソース・フォルダー: myproj_basic/ch12
パッケージ: mysqlConnect.php
アクセスURL:http://localhost/myproj_basic/ch12/mysqlConnect.php

mysqlConnect.php

実行結果

解説

2~4行目でMySQLサーバへの接続に必要な各情報を変数に設定しています。

7行目でmysqli_connect関数の引数に各情報を設定して、MySQLサーバへ接続しています。変数$linkに代入される戻り値が「接続情報」になります。


図 12.4.1:MySQLサーバへ接続

11行目ではmysqli_close関数の引数に$link(接続情報)を設定して、MySQLサーバから切断しています。


図 12.4.2:MySQLサーバの切断

18行目では接続情報(localhost via TCP/IP)を画面に表示しています。11行目でこのサーバへ接続を切断しDB自体は使用不可能になっていますが、9行目で接続情報のテキストを変数$link_infoに代入したたのでそのまま表示できます。

12.4.2 データベースを選択してみよう

MySQLサーバに接続しただけでは、まだデータの検索(取得)や更新などの操作が行えません。なぜならMySQLサーバ内には複数のデータベースが存在しており、どれを対象にアクセスして良いのか分からないからです。


図 12.4.3:MySQLサーバ内には複数のデータベースがある

プログラムでデータの操作を行うには、「mysqli_select_db関数」を使ってデータベースを選択して初めて行えます。また、1度データベースを選択した後でも、別のデータベースに切り替えることも可能です。

書式:データベースの選択

引数の$変数はMySQLサーバへ接続した際の、戻り値「接続情報(ID)」を設定します。

データベースを選択するプログラム

MySQLサーバへ接続後、データベースを選択します。

ソース・フォルダー: myproj_basic/ch12
パッケージ: databaseChoice.php
アクセスURL:http://localhost/myproj_basic/ch12/databaseChoice.php

databaseChoice.php

実行結果

解説

このプログラムは前項のmysqlConnect.phpに、データベースを選択する処理が追加されているだけです。
5行目に変数$dbに選択するデータベース名「itemdb」を設定します。※12.2で準備したデータベースです。

14行目でmysqli_select_db関数の引数に$link(接続情報)と$db(データベース名)を設定して、利用するデータベースを選択しています。この処理を行うと選択したデータベースを対象に、データの操作を行うことができるようになります。


図 12.4.4:データベースを選択

実行結果を見ても前項のプログラムと一緒のため、本当にデータベースを選択されたのかは分かりません。データベースへのアクセスが、正しく行われたのか確認する方法について次項で学習します。

12.4.3 データベースへのアクセスを安全に行う方法

前項までのプログラムでは、データベースにアクセスするための情報が必ず正しいことが前提になっていました。しかし、別のシステムであるMySQLを利用している以上、設定が変更される可能性もあります。またプログラムの記述を間違ってしまうことも当然あります。
mysqli関数は操作に失敗するとエラーメッセージを出したり、戻り値にfalseを返して失敗を教えてくれるものがあります。全ての関数記述後に条件判定を追加しても良いですが、大変な手間になってしまいます。そこで以下の書式で示す「or」と「die関数」を使って、戻り値のある関数の失敗(false)を判定する仕組みを利用します。

書式:関数の安全な使い方

「or」はこれまで目にしてきた論理演算子です。条件式で使われるのが一般的な使い方ですが、通常の処理にも使うことができます。この書式では左側の「処理失敗の戻り値がfalseの関数」の戻り値が「true(false以外)」なら条件を満たすため、右側の処理は行いません。逆に「false」ならば右側のdie関数の処理を行うことになります。
そして「die関数」は引数のメッセージを出力した後に、プログラムを強制終了させるものです。強制終了させる仕組みはexit関数と同じになります。

mysqli関数を安全に使用するプログラム

mysqli関数に「or die関数」を組み合わせて、不正な情報の場合処理が強制終了されることを確認します。

ソース・フォルダー: myproj_basic/ch12
パッケージ: checkMysqlMethod.php
アクセスURL:http://localhost/myproj_basic/ch12/checkMysqlMethod.php

checkMysqlMethod.php

実行結果(正常な場合)

実行結果(各エラーの場合)

解説

このプログラムは前項で作成したdatabaseChoice.phpのmysqli関数に、「or die関数」処理を追加したものになっています。その箇所は10、13、19行目になります。各関数の処理に失敗すると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関数を一緒に記述するのは、それ以降の処理が実行されないようにするためです。

それでは、次節より選択したデータベースの本格的な操作方法(検索、更新)について学習していきます。

NEXT>> 12.5 データの検索をしてみよう