PHP マニュアル
前のページ |  | 次のページ

# LXXXIX. 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 のインストールディレクトリを指定するべきです。 これにより、PHP が MySQL によりインストールされた クライアントライブラリを使用するようになり、衝突が回避されます。

### PHP 5+

MySQL はデフォルトでは有効とならず、PHP に MySQL ライブラリも 付属しません。 この理由の詳細については、 FAQ を参照してください。 ヘッダとライブラリ は、 MySQL からダウンロードできます。

## 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 以降で使用可能です。

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); ?>`

前のページ | ホーム | 次のページ
muscat_setup | 上に戻る | mysql_affected_rows