以下の関数を利用可能とするには、MySQL サポートを指定して PHP を
コンパイルする必要があります。
コンパイルするには、単純に
--with-mysql[=DIR]
設定オプションを利用してください。ここで、オプションの
[DIR] は MySQL がインストールされているディレクトリを表します。
この MySQL 拡張モジュールは、MySQL のバージョン 4.1.0 以降の機能を
完全にはサポートしていません。代わりに
MySQLi を利用してください。
もし mysql 拡張モジュールと mysqli 拡張モジュールを同時に
インストールしたい場合は、衝突を避けるために両方で同じクライアントライブラリを
用いる必要があります。
オプション --with-mysql は
デフォルトで有効となっています。configureオプション
--without-mysql を使用すると、
この動作は無効になります。
MySQL インストールディレクトリへのパスを指定しなかった場合、
PHP はバンドルされた MySQL クライアントライブラリを使用します。
(auth-mysqlのような)MySQL を使用する他のアプリケーションを実行するユーザは、
バンドルされたライブラリを使わず
--with-mysql=/path/to/mysql
のように MySQL のインストールディレクトリを指定するべきです。
これにより、PHP が MySQL によりインストールされた
クライアントライブラリを使用するようになり、衝突が回避されます。
MySQL はデフォルトでは有効とならず、PHP に MySQL ライブラリも
付属しません。
この理由の詳細については、
FAQ を参照してください。
ヘッダとライブラリ は、
MySQL からダウンロードできます。
MySQL 拡張モジュールは、PHP に組み込まれています。
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 がシステムによって
見つけられなかったことが原因です。
| 警告 |
この拡張モジュールと 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 以降で使用可能です。 |
PHP_INI_* 定数の詳細および定義については
付録G を参照してください。
以下に設定ディレクティブに関する
簡単な説明を示します。
- mysql.allow_persistent
boolean
MySQL への
持続的接続
を可能にするかどうか。
- mysql.max_persistent
integer
プロセス毎の持続的 MySQL 接続の最大数。
- mysql.max_links
integer
持続的接続を含むプロセス毎の MySQL 接続の最大数。
- mysql.trace_mode
boolean
トレースモード。mysql.trace_mode が有効の場合、
テーブル/インデックスのスキャン時の警告・結果セットの未開放・SQL エラー
などが画面に表示されます(PHP 4.3.0 以降で使用可能です)。
- mysql.default_port
string
他のポートが指定されない場合、データベースサーバ接続時に使用される
デフォルトの TCP ポート番号。デフォルトが指定されない場合は、
環境変数 MYSQL_TCP_PORT・
/etc/services の
mysql-tcpエントリ・コンパイル時の
MYSQL_PORT 定数の順番でポートが取得されます。
Win32 では、MYSQL_PORT 定数のみが使用されます。
- mysql.default_socket
string
他にソケット名が指定されない場合、ローカルなデータベースサーバに
接続する時のデフォルトのソケット名。
- mysql.default_host
string
他のサーバ名が指定されない場合に、データベースサーバへの接続時に
使用されるデフォルトのサーバ名。
SQL セーフモード では適用されません。
- mysql.default_user
string
他のユーザ名が指定されない場合に、データベースサーバへの接続時に
使用されるデフォルトのユーザ名。
SQL セーフモード では適用されません。
- mysql.default_password
string
他のパスワードが指定されない場合に、データベースサーバへの接続時に
使用されるデフォルトのパスワード。
SQL セーフモード では適用されません。
- mysql.connect_timeout
integer
接続の有効時間(単位:秒)。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() 関数は、結果の配列の形式を
指定するための定数を使用します。以下の定数が定義されています。
表 3. MySQL フェッチ定数
| 定数 | 説明 |
|---|
| MYSQL_ASSOC |
カラムは、フィールド名を添字とする配列形式で返されます。
|
| MYSQL_BOTH |
カラムは、数値の添字とフィールド名の添字のどちらでもアクセスできる
配列形式で返されます。
|
| MYSQL_NUM |
カラムは、数値の添字を持つ配列形式で返されます。添字は 0 からはじまり、
結果の最初のフィールドです。
|
注意:
ほとんどの MySQL 関数は、link_identifier を
最後のパラメータとしてオプションで受け付けます。これを指定しなかった場合、
直近にオープンされた接続が使用されます。もし直近の接続が存在しない場合、
php.ini のデフォルトパラメータを使用して接続を確立しようとします。
この試行にも失敗した場合、関数は FALSE を返します。
以下は、MySQL データベースに接続し、クエリを実行し、結果レコードを
出力、接続を切断する例です。
例 1. MySQL 拡張モジュールに関する例
<?php // データベースに接続し、選択する $link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password') or die('Could not connect: ' . mysql_error()); echo 'Connected successfully'; mysql_select_db('my_database') or die('Could not select database');
// SQL クエリを実行する $query = 'SELECT * FROM my_table'; $result = mysql_query($query) or die('Query failed: ' . mysql_error());
// HTML に結果を出力する echo "<table>\n"; while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { echo "\t<tr>\n"; foreach ($line as $col_value) { echo "\t\t<td>$col_value</td>\n"; } echo "\t</tr>\n"; } echo "</table>\n";
// 結果セットを開放する mysql_free_result($result);
// 接続を閉じる mysql_close($link); ?>
|
|