14.PHPからMySQLにアクセスしてみる。 1)MySQLIを使えるようにする。 「php.ini」ファイルを開いて extension=php_mysql.dll の下に以下の行を追加する。 extention=php_mysqli.dll を追加する。 2)PHPとデータベースの連携手順 PHPを使ってデータベースに接続する場合は、PEARを使って、接続する方法がありますが データベース操作の仕組みがわかりにくいのでここでは、低レベルデータベース関数を使った方法で 接続を行います。 以下にPHPとMySQLの連携手順の流れを示します。 <データベース(MySQL)処理手順>
サーバにインストールされているデータベースシステムに接続します。 |
|||
接続したデータベースシステムのデータベースファイルに接続します。 データベースシステム接続時に同時にデータベースファイルに接続することも可能です。 |
|||
ブラウザ(クライアント)から送信されてきたデータなどをもとにSQL文を作成します。 |
|||
接続したデータベースファイルに対してSQL文を発行して問合せ、更新、追加、削除等を行います。 問合せ、更新、追加、削除等の結果は、戻り値として返されます。 |
|||
SQL文の条件で抽出されたデータに基づいて処理プログラムを書きます。 |
|||
データベースシステムへの接続を閉じます。 |
HPからMySQLにアクセスするするためには、上記フローチャートにある関数を使いますが「myqsl」と「mysqli」があります。 これは以下のように使い分けします。 mysql ・・・ MySQL4.0以前 mysqli ・・・ MySQL4.1以降でPHP5以上が必須(mysql4.1、PHP5以降でもmusqlは使えます。) ①データベースシステムに接続する関数(mysql_connect()、mysqli_connect())の書式 mysql_connect([ホスト名,][ユーザ名,][パスワード]) ・ホスト名(サーバ名) ・・・ MySQLがインストールされているホスト名を指定します。WebサーバにMySQを インストールした場合は、通常「localhost」を指定します。 ・ユーザ名 ・・・ MySQLデータベースシステムに登録されたユーザ名を指定します。 ・パスワード ・・・ MySQLデータベースシステムに登録されたパスワードを指定します。 このユーザ名とパスワードを管理者権限で指定すると危険なので、実際にサイトを運営する場合は、 ユーザ設定をする必要があります。 ここでは、勉強用なので管理者権限で処理しています。 ・戻り値 ・・・ 接続が成功した場合は、「リンクID」という値を返します。 接続に失敗した場合は、「FALSE」を返します。 接続したデータベースを操作(テーブル操作など)する場合、このリンクIDが必要になります。 mysqli_connect(([ホスト名,][ユーザ名,][パスワード,][データベース名]) ・データベース名 ・・・ 接続したいデータベースファイルのデータベース名を指定します。 ②データベースファイルに接続する関数(mysql_select_db()、mysqli_select_db())の書式 mysql_select_db(データベース名,[リンクID]) mysqli_select_db([リンクID,]データベース名) ・戻り値 ・・・ データベースファイルが選択できた場合は、「TRUE」、失敗した場合は、「FALSE」を返します。 ③SQL文を発行する関数(mysql_query()、mysql_query())の書式 mysql_query(SQL文[,リンクID]) mysqli_query([リンクID,]SQL文) ・戻り値 ・・・ エラー時は、「FALSE」を返します。 SELECT文の場合は、抽出した行(レコード)のリソースを返します。 INSERT,DELETE,UPDATEは成功した場合に「TRUE」を返します。 ④データベースシステムへの接続を閉じる関数(mysql_close()、mysqli_close())の書式 mysql_close([リンクID]) mysqli_close([リンクID]) 3)その他以下のプログラムで使用されている関数 mysql_fetch_array(リソース名[,取得する配列の形式]) mysqli_fetch_array(リソース名[,取得する配列の形式]) ・リソース名 ・・・ ③の関数(クエリ)で処理された戻り値を指定します。 ・取得する配列の形式 ・・・ 「MYSQL_ASSOC」は、フィールド名をキーにした連想配列に格納される。 「MYSQL_NUM」は、添え数を使った配列に格納される。 「MYSQL_BOTH」は、「MYSQL_ASSOC」と「MYSQL_NUM」の両方が作れれる。 デフォルトは、「MYSQL_BOTH」になります。 ・戻り値 ・・・ 取得した行(レコード)文字列の連想配列を返します。 取得した行(レコード)が存在しない場合は「FALSE」を返します。 4)テーブル「userid_tbl」を表示させてみる。 以下のプログラムをファイル名「userDisp.php」で保存して実行してみてください。
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>フィールド(列)の表示</title>
</head>
<body>
<?php
//以下の行は、MySQLサーバへの接続を行っている。接続できたときは、$connに
//その接続情報(#1、#2のようにキー番号)が格納される。接続に失敗した場合は、何も格納されない。
$conn=mysqli_connect('localhost','root','*******') //以下の行は、上の行が正しく実行されない場合、「or」の後の処理が行われる。
or exit("MySQLへ接続できません。");
//以下の行は、指定したデータベースに接続を行っている。
mysqli_select_db($conn,'userid_db')
or exit("データベース名が間違っています。"); //以下の行は、MySQLに対して発行するSQL分の文字列を書いている。
$sql="SELECT * FROM userid_tbl;"; //以下の行は、MySQLに対して問い合わせ(クエリー)を実行している。実行した結果は、$resultに格納される。
$result=mysqli_query($conn,$sql)
or exit("データの抽出に失敗しました。");
?>
<table border="1">
<tr>
<th>id</th><th>userName</th><th>passWd</th>
<?php
//以下の行は、$resultに格納されているレコードからセル単位で取り出して配列「$userid」に格納している。
//「MYSQL_ASSOC」は、フィールド名をキーにした連想配列に格納される。
//「MYSQL_NUM」にすると、添え数を使った配列に格納される。
//「MYSQL_BOTH」にすると、「MYSQL_ASSOC」と 「MYSQL_NUM」の両方が作れれる。
while($userid=mysqli_fetch_array($result,MYSQL_ASSOC)){
?>
<tr>
<!--以下のプログラムは、テーブルのセルにフィールドのデータを挿入している。-->
<!--mysqli_fetch_array($MySQL['result'],MYSQL_ASSOC)の第2引数が、「MYSQL_ASSOC」になっているため-->
<!--$useridは、フィールド名をキーにした連想配列に値が代入されるため以下のように記述することで値が参照できます。-->
<td><?= $userid['id'] ?></td><td><?= $userid['userName'] ?></td><td><?= $userid['passWd'] ?></td>
</tr>
<?php }
//データベースを閉じている。(MySQLへの接続がきられる。)
mysqli_close($conn);
?>
</table>
</body> </html>