連載
» 2001年04月03日 00時00分 公開

快速MySQLでデータベースアプリ!(5):PHPで実用アプリケーションを作ろう(前編) (2/2)

[鶴長鎮一,MySQLユーザ会]
前のページへ 1|2       

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 フィールドのテーブル名を得る

前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。