PHPで実用アプリケーションを作ろう(前編):快速MySQLでデータベースアプリ!(5)(2/2 ページ)
PHPはMySQLとの親和性が高いスクリプト言語の1つだ。今回はこのPHPを利用して、実用に耐えるアプリケーションを作成しよう。前編では、その基礎となるPHPのインストールや、PHPでMySQLを操作する方法を紹介する。
PHPでMySQLを操作
ここからはPHPスクリプトからMySQLサーバにアクセスするための方法を1つずつ見ていきます。
MySQLデータベースとの接続・切断
MySQLサーバへの接続にはmysql_connect関数を下記の要領で用います。
<?php $接続ID = mysql_connect("MySQLサーバのアドレス:ポート番号","ユーザー名","パスワード"); ?>
mysql_connect()の戻り値として接続IDを受け取ります。切断の手順を加えると下記のようになります。
<?php $接続ID = mysql_connect("...","...","...."); mysql_close($接続ID); ?>
実際にはスクリプトの終了とともに接続IDも破棄され、MySQLサーバへの接続も解除されるのですが、行儀よく接続を閉じる癖をつけておきましょう。
例では日本語の変数名を利用していますが、実際には“$con”などの非2bytes文字を使用すべきです。また、ファイル自体も漢字コードをEUCで保存するようにし、ファイルの先頭には
<HEAD> <META HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=x-euc-jp"> <TITLE>XXXXXXX</TITLE> </HEAD>
を加えてファイルがEUC漢字コードであることをブラウザに明示しましょう。
mysql_connect()関数とは別に、もう1つMySQLサーバとの接続を確立する関数が用意されています。上記のmysql_connect()関数がスクリプトの終了とともに自動的に接続が解除されるのに対し、下記の方法はスクリプト終了後も永続的に接続が確立されます。
<?php $接続ID = mysql_pconnect("MySQLサーバのアドレス:ポート番号","ユーザー名","パスワード"); ?>
mysql_pconnect()関数は、すでに同じサーバ・ユーザーで接続が確立されている場合、新たな接続を試みず、既存の接続IDを返します。そのため何度呼び出されても無駄な接続が発生しません。データベースへの接続が頻繁な用途では、プロセスを最小限にできるので動作コストが少なくなります。しかし、データベースとの接続がそれほど頻繁でない場合は、サーバに無駄なプロセスを常駐させることになります。どちらの接続関数を使うかは、運用をよく考える必要があります。
データの取得と表示
MySQLデータベースとの接続確立後は、データベース名を指定してSQL文を実行します。
<?php ...(省略)... mysql_select_db("データベース名",$接続ID); mysql_query("SQL文",$接続ID); ...(省略)... ?>
SQL文がSELECTの場合、mysql_query()関数は戻り値にクエリーIDを返します。検索結果を取得したい場合は、クエリーIDに対してmysql_fetch_object()関数を用います。
<?php ...(省略)... $クエリーID = mysql_query("SELECT分で始まるSQL文",$接続ID); $結果オブジェクト = mysql_fetch_object($クエリーID) ...(省略)... ?>
mysql_fetch_object()の戻り値として結果オブジェクトを受け取ります。そう、やはりここでもオブジェクトという概念が必要になります。本連載のPerlの回でも紹介していますので、そちらも参考にしてください。
実際の値の取得プロセスを含めると下記のようになります。
<?php ...(省略)... $結果オブジェクト = mysql_fetch_object($クエリーID) echo $row->テーブルのカラム名; ...(省略)... ?>
どうしてもオブジェクト的な方法を使いたくない方は、連想配列で結果を取得する手段も用意されています。
<?php ...(省略)... $結果 = mysql_fetch_array($クエリーID) echo $row["テーブルのカラム名"]; ...(省略)... ?>
どちらの場合も、最後はmysql_free_result()関数を使って結果を保持しているメモリ領域を解放しましょう。
<?php ...(省略)... print "$row... mysql_free_result($クエリーID); ...(省略)... ?>
そのほかのデータの操作
SELECT以外のSQL文の場合にもmysql_query()関数を使います。ただし、その場合戻り値はクエリーIDではなく、“true”か“false”を返します。
また、ここで紹介した以外にも、主に以下のようなMySQL用関数があります。
mysql_affected_rows | 一番最近のクエリーで変更された行の数を得る |
---|---|
mysql_change_user | アクティブな接続でログイン中のユーザーを変更する |
mysql_close | MySQL接続を閉じる |
mysql_connect | MySQLサーバへの接続をオープンする |
mysql_create_db | MySQLデータベースを作成する |
mysql_data_seek | 内部的な結果ポインタを移動する |
mysql_db_name | データベース名を得る |
mysql_db_query | MySQLクエリーを送信する |
mysql_drop_db | MySQLデータベースを破棄(削除)する |
mysql_errno | 直近のMySQL処理からエラーメッセージのエラー番号を返す |
mysql_error | 直近に実行されたMySQLコールのエラーメッセージを返す |
mysql_fetch_array | 連想配列、添字配列、またはその両方として結果の行を取得する |
mysql_fetch_assoc | 連想配列として結果の行を取得する |
mysql_fetch_field | 結果からカラム情報を取得し、オブジェクトとして返す |
mysql_fetch_lengths | 結果における各出力の長さを得る |
mysql_fetch_object | 結果の行をオブジェクトとして取得する |
mysql_fetch_row | 結果を添字配列として取得する |
mysql_field_flags | 結果において指定したフィールドのフラグを得る |
mysql_field_name | 結果において指定したフィールド名を得る |
mysql_field_len | 指定したフィールドの長さを得る |
mysql_field_seek | 結果ポインタを指定したフィールドオフセットにセットする |
mysql_field_table | 指定したフィールドが含まれるテーブルの名前を得る |
mysql_field_type | 結果において指定したフィールドの型を得る |
mysql_free_result | 結果保持用メモリを解放する |
mysql_insert_id | 直近のINSERTで生成されたIDを得る |
mysql_list_dbs | MySQLサーバ上で利用可能なデータベースのリストを得る |
mysql_list_fields | MySQL結果フィールドのリストを得る |
mysql_list_tables | MySQLデータベース上のテーブルのリストを得る |
mysql_num_fields | 結果におけるフィールドの数を得る |
mysql_num_rows | 結果における行の数を得る |
mysql_pconnect | MySQLサーバへの持続的な接続をオープンする |
mysql_query | SQLクエリーをMySQLに送信する |
mysql_result | 結果データを得る |
mysql_select_db | MySQLデータベースを選択する |
mysql_tablename | フィールドのテーブル名を得る |
Copyright © ITmedia, Inc. All Rights Reserved.