XCVI. MySQL 関数
導入
以下の関数は、MySQL データベースサーバへのアクセスを可能にします。 MySQL に関するより詳細な情報は、 http://www.mysql.com/ にあります。
MySQL のドキュメントは、 http://dev.mysql.com/doc/ にあります。
要件
以下の関数を利用可能とするには、MySQL サポートを指定して PHP を コンパイルする必要があります。
インストール手順
コンパイルするには、単純に
--with-mysql[=DIR]
設定オプションを利用してください。ここで、オプションの
[DIR]
は MySQL がインストールされているディレクトリを表します。
この MySQL 拡張モジュールは MySQL 4.1.0 以降とも互換性がありますが、 それ以降のバージョンが提供する新機能はサポートしていません。 この機能を使用するには、 MySQLi 拡張モジュールを使用してください。
もし mysql 拡張モジュールと mysqli 拡張モジュールを同時にインストールしたい場合は、 衝突を避けるために両方で同じクライアントライブラリを用いる必要があります。
Linux へのインストール
PHP 4
オプション
--with-mysql
はデフォルトで有効となっています。configureオプション
--without-mysql
を使用すると、 この動作は無効になります。 MySQL インストールディレクトリへのパスを指定しなかった場合、 PHP はバンドルされた MySQL クライアントライブラリを使用します。
(auth-mysqlのような)MySQL を使用する他のアプリケーションを実行するユーザは、 バンドルされたライブラリを使わず
--with-mysql=/path/to/mysql
のように MySQL のインストールディレクトリを指定するべきです。 これにより、MySQL によりインストールされたクライアントライブラリを PHP が使用するようになり、衝突が回避されます。
Windows へのインストール
PHP 4
MySQL 拡張モジュールは、PHP に組み込まれています。
PHP 5+
MySQL はもはやデフォルトでは有効となりません。したがって
php.ini
で
php_mysql.dll
DLL を有効にしておく必要があります。 また、PHP が MySQL クライアントライブラリにアクセスできなければなりません。
libmysql.dll
というファイルが Windows 版の PHP 配布ファイルに含まれており、PHP が MySQL と話すためにはこのファイルが Windows の
PATH
にある必要があります。そのための方法については、 "
Windows で PHP のディレクトリを PATH に追加するにはどうすればいいのですか?
" という FAQ を参照してください。
libmysql.dll
を Windows のシステムディレクトリにコピーしても動作しますが (システムディレクトリは、デフォルトでシステムの
PATH
に含まれています)、お勧めしません。
( php_mysql.dll も含めた) PHP 拡張モジュールを有効にするには、PHP ディレクティブ extension_dir に拡張モジュールの存在する場所を設定するべきです。 Windows へのマニュアルインストール方法 も参照してください。PHP 5 での extension_dir の例は c:\php\ext です。
注意: Web サーバの起動時に以下のようなエラーが発生する場合: "Unable to load dynamic library './php_mysql.dll'" これは php_mysql.dll や libmysql.dll がシステムによって見つけられなかったことが原因です。
MySQL インストールの注意
| 警告 |
|
この拡張モジュールと recode 拡張モジュールを同時にロードした場合、 PHP のクラッシュと起動に関する問題が発生する可能性があります。 より詳細な情報については、 recode 拡張モジュールを参照してください。 |
注意: latin (デフォルト)以外の文字セットを必要とする場合、 使用する文字セットのサポートを有効にしてコンパイルした(バンドル版でない) libmysql をインストールする必要があります。
実行時設定
php.ini の設定により動作が変化します。
表 1. MySQL 設定オプション
| 名前 | デフォルト | 変更の可否 | 変更履歴 |
|---|---|---|---|
| mysql.allow_persistent | "1" | PHP_INI_SYSTEM | |
| mysql.max_persistent | "-1" | PHP_INI_SYSTEM | |
| mysql.max_links | "-1" | PHP_INI_SYSTEM | |
| mysql.trace_mode | "0" | PHP_INI_ALL | PHP 4.3.0 以降で使用可能です。 |
| mysql.default_port | NULL | PHP_INI_ALL | |
| mysql.default_socket | NULL | PHP_INI_ALL | PHP 4.0.1 以降で使用可能です。 |
| mysql.default_host | NULL | PHP_INI_ALL | |
| mysql.default_user | NULL | PHP_INI_ALL | |
| mysql.default_password | NULL | PHP_INI_ALL | |
| mysql.connect_timeout | "60" | PHP_INI_ALL | PHP <= 4.3.2 では PHP_INI_SYSTEM で、PHP 4.3.0 以降で使用可能です。 |
以下に設定ディレクティブに関する 簡単な説明を示します。
-
mysql.allow_persistentboolean -
MySQL への 持続的接続 を可能にするかどうか。
-
mysql.max_persistentinteger -
プロセス毎の持続的 MySQL 接続の最大数。
-
mysql.max_linksinteger -
持続的接続を含むプロセス毎の MySQL 接続の最大数。
-
mysql.trace_modeboolean -
トレースモード。 mysql.trace_mode が有効の場合、 テーブル/インデックスのスキャン時の警告・結果セットの未開放・SQL エラー などが画面に表示されます(PHP 4.3.0 以降で使用可能です)。
-
mysql.default_portstring -
他のポートが指定されない場合、データベースサーバ接続時に使用される デフォルトの TCP ポート番号。デフォルトが指定されない場合は、 環境変数
MYSQL_TCP_PORT・ /etc/services の mysql-tcp エントリ・コンパイル時の MYSQL_PORT 定数の順番でポートが取得されます。 Win32 では、 MYSQL_PORT 定数のみが使用されます。 -
mysql.default_socketstring -
他にソケット名が指定されない場合、ローカルなデータベースサーバに 接続する時のデフォルトのソケット名。
-
mysql.default_hoststring -
他のサーバ名が指定されない場合に、データベースサーバへの接続時に 使用されるデフォルトのサーバ名。 SQL セーフモード では適用されません。
-
mysql.default_userstring -
他のユーザ名が指定されない場合に、データベースサーバへの接続時に 使用されるデフォルトのユーザ名。 SQL セーフモード では適用されません。
-
mysql.default_passwordstring -
他のパスワードが指定されない場合に、データベースサーバへの接続時に 使用されるデフォルトのパスワード。 SQL セーフモード では適用されません。
-
mysql.connect_timeoutinteger -
接続の有効時間(単位:秒)。Linux では、この有効時間はサーバからの 最初の応答の待ち時間としても使用されます。
リソース型
MySQL モジュールでは、2 種類のリソース型が使用されています。 最初のリソースはデータベース接続のリンク ID で、2 番目のリソースは クエリ結果を保持するリソースです。
定義済み定数
以下の定数が定義されています。 この関数の拡張モジュールが PHP 組み込みでコンパイルされているか、 実行時に動的にロードされている場合のみ使用可能です。
PHP 4.3.0 以降では、 mysql_connect() や mysql_pconnect() で追加のクライアントフラグを 指定できるようになりました。以下の定数が定義されています。
表 2. MySQL クライアント定数
| 定数 | 説明 |
|---|---|
| MYSQL_CLIENT_COMPRESS | 圧縮プロトコルを利用します。 |
| MYSQL_CLIENT_IGNORE_SPACE | 関数名の後のスペースを許可します。 |
| MYSQL_CLIENT_INTERACTIVE | interactive_timeout で指定された秒数(wait_timeout のかわり) の無通信が続くまで接続を閉じません。 |
| MYSQL_CLIENT_SSL | SSL による暗号化を使用します。このフラグは、バージョン 4.x 以降の MySQL クライアントライブラリを利用している場合にのみ有効です。 PHP 4 や、Windows 版の PHP 5 にバンドルされているのは、バージョン 3.23.x のライブラリです。 |
mysql_fetch_array() 関数は、結果の配列の形式を 指定するための定数を使用します。以下の定数が定義されています。
注意
注意: ほとんどの MySQL 関数は、
link_identifierを 最後のパラメータとしてオプションで受け付けます。これを指定しなかった場合、 直近にオープンされた接続が使用されます。もし直近の接続が存在しない場合、 php.ini のデフォルトパラメータを使用して接続を確立しようとします。 この試行にも失敗した場合、関数は FALSE を返します。
例
以下は、MySQL データベースに接続し、クエリを実行し、結果レコードを 出力、接続を切断する例です。
- 目次
- mysql_affected_rows -- 一番最近の操作で変更された行の数を得る
- mysql_change_user -- アクティブな接続でログイン中のユーザーを変更する
- mysql_client_encoding -- 文字セット名を返す
- 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_escape_string -- mysql_query で使用するために文字列をエスケープする
- mysql_fetch_array -- 連想配列、添字配列、またはその両方として結果の行を取得する
- mysql_fetch_assoc -- 連想配列として結果の行を取得する
- mysql_fetch_field -- 結果からカラム情報を取得し、オブジェクトとして返す
- mysql_fetch_lengths -- 結果における各出力の長さを得る
- mysql_fetch_object -- 結果の行をオブジェクトとして取得する
- mysql_fetch_row -- 結果を添字配列として取得する
- mysql_field_flags -- 結果において指定したフィールドのフラグを取得する
- mysql_field_len -- 指定したフィールドの長さを返す
- mysql_field_name -- 結果において指定したフィールド名を取得する
- mysql_field_seek -- 結果ポインタを指定したフィールドオフセットにセットする
- mysql_field_table -- 指定したフィールドが含まれるテーブルの名前を取得する
- mysql_field_type -- 結果において指定したフィールドの型を取得する
- mysql_free_result -- 結果保持用メモリを開放する
- mysql_get_client_info -- MySQL クライアント情報を取得する
- mysql_get_host_info -- MySQL ホスト情報を取得する
- mysql_get_proto_info -- MySQL プロトコル情報を取得する
- mysql_get_server_info -- MySQL サーバ情報を取得する
- mysql_info -- 直近のクエリについての情報を得る
- mysql_insert_id -- 直近の INSERT 操作で生成された ID を得る
- mysql_list_dbs -- MySQL サーバ上で利用可能なデータベースのリストを得る
- mysql_list_fields -- MySQL テーブルのフィールドのリストを得る
- mysql_list_processes -- MySQL プロセスのリストを得る
- mysql_list_tables -- MySQL データベース上のテーブルのリストを得る
- mysql_num_fields -- 結果におけるフィールドの数を得る
- mysql_num_rows -- 結果における行の数を得る
- mysql_pconnect -- MySQL サーバへの持続的な接続をオープンする
- mysql_ping -- サーバとの接続状況を調べ、接続されていない場合は再接続する
- mysql_query -- MySQL クエリを送信する
- mysql_real_escape_string -- SQL 文中で用いる文字列の特殊文字をエスケープする
- mysql_result -- 結果データを得る
- mysql_select_db -- MySQL データベースを選択する
- mysql_stat -- 現在のシステムの状態を取得する
- mysql_tablename -- フィールドのテーブル名を得る
- mysql_thread_id -- カレントのスレッド ID を返す
- mysql_unbuffered_query -- MySQL に SQL クエリを送信するが、結果に対してのフェッチやバッファリングは行わない