C. MySQL 改良版拡張サポート(mysqli)

導入

mysqli 拡張サポートによって MySQL 4.1 以上で提供される機能を利用することが できるようになります。MySQL データベースサーバに関する詳細は http://www.mysql.com/ をご覧ください。

MySQL に関するドキュメントは http://dev.mysql.com/doc/ にあります。

このドキュメントの一部は、MySQL AB の許可を得て MySQL マニュアルから引用 したものです。

要件

これらの関数を有効にするには、mysqli 拡張サポートを 有効にして PHP をコンパイルする必要があります。

注意: mysqli 拡張サポートは MySQL 4.1.3 以上で動作するよう設計されています。 それ以前のバージョンについては MySQL 拡張サポートのドキュメントをご覧ください。

インストール手順

PHP に mysqli 拡張サポートを追加するには、 --with-mysqli=mysql_config_path/mysql_config オプションを指定して PHP をコンパイルする必要があります。 mysql_config_path には MySQL 4.1 以上に付属する mysql_config プログラムが存在するパスを 指定してください。

mysqli 拡張サポートと標準の mysql 拡張を共存させる形でインストールしたい 場合には、衝突を避けるために同じクライアントライブラリを利用する必要があります。

Windows へのインストール

MySQLi はデフォルトでは有効となりません。したがって php.iniphp_mysqli.dll DLL を有効にしておく必要があります。 また、PHP が MySQL クライアントライブラリにアクセスできなければなりません。 libmysql.dll というファイルが Windows 版の PHP 配布ファイルに含まれており、PHP が MySQL と話すためにはこのファイルが Windows の PATH にある必要があります。そのための方法については、 "Windows で PHP のディレクトリを PATH に追加するにはどうすればいいのですか?" という FAQ を参照してください。 libmysql.dll を Windows のシステムディレクトリにコピーしても動作しますが (システムディレクトリは、デフォルトでシステムの PATH に含まれています)、お勧めしません。

(php_mysqli.dll も含めた) PHP 拡張モジュールを有効にするには、PHP ディレクティブ extension_dir に拡張モジュールの存在する場所を設定するべきです。 Windows へのマニュアルインストール方法 も参照してください。PHP 5 での extension_dir の例は c:\php\ext です。

注意: Web サーバの起動時に以下のようなエラーが発生する場合: "Unable to load dynamic library './php_mysqli.dll'" これは php_mysqli.dlllibmysql.dll がシステムによって見つけられなかったことが原因です。

実行時設定

php.ini の設定により動作が変化します。

表 1. MySQLi 設定オプション

名前デフォルト変更の可否変更履歴
mysqli.max_links"-1"PHP_INI_SYSTEMPHP 5.0.0 以降で使用可能です。
mysqli.default_port"3306"PHP_INI_ALLPHP 5.0.0 以降で使用可能です。
mysqli.default_socketNULLPHP_INI_ALLPHP 5.0.0 以降で使用可能です。
mysqli.default_hostNULLPHP_INI_ALLPHP 5.0.0 以降で使用可能です。
mysqli.default_userNULLPHP_INI_ALLPHP 5.0.0 以降で使用可能です。
mysqli.default_pwNULLPHP_INI_ALLPHP 5.0.0 以降で使用可能です。

PHP_INI_* 定数の詳細と定義については、 設定の変更 を参照してください。

以下に設定ディレクティブに関する 簡単な説明を示します。

mysqli.max_links integer

プロセス毎の MySQL 接続の最大数。

mysqli.default_port string

他のポートが指定されない場合、データベースサーバ接続時に使用される デフォルトの TCP ポート番号。デフォルトが指定されない場合は、 環境変数 MYSQL_TCP_PORT/etc/servicesmysql-tcpエントリ・コンパイル時の MYSQL_PORT 定数の順番でポートが取得されます。 Win32 では、MYSQL_PORT 定数のみが使用されます。

mysqli.default_socket string

他にソケット名が指定されない場合、ローカルな データベースサーバに接続する時のデフォルトのソケット名。

mysqli.default_host string

他のサーバ名が指定されない場合に、データベースサーバへの接続時に 使用されるデフォルトのサーバ名。 safe mode では適用されません。

mysqli.default_user string

他のユーザ名が指定されない場合に、データベースサーバへの接続時に 使用されるデフォルトのユーザ名。 safe mode では適用されません。

mysqli.default_password string

他のパスワードが指定されない場合に、データベースサーバへの接続時に 使用されるデフォルトのパスワード。 safe mode では適用されません。

定義済みクラス

mysqli

PHP と MySQL データベースの間の接続を表します。

コンストラクタ

  • mysqli - 新たに mysqli オブジェクトを作成します

メソッド

  • autocommit - データベース変更時のオートコミットをオンまたはオフにします

  • change_user - 指定したデータベース接続のユーザを変更します

  • character_set_name - データベース接続のデフォルトの文字セットを返します

  • close - オープンされている接続をクローズします

  • commit - カレントのトランザクションをコミットします

  • connect - MySQL データベースサーバーへの新規接続をオープンします

  • debug - デバッグ処理を行います

  • dump_debug_info - デバッグ情報をダンプします

  • get_client_info - クライアントのバージョンを返します

  • get_host_info - 使用されている接続の型を返します

  • get_server_info - MySQL サーバーのバージョンを返します

  • get_server_version - MySQL サーバーのバージョンを返します

  • init - mysqli オブジェクトを初期化します

  • info - 直近に実行されたクエリに関する情報を取得します

  • kill - 指定した MySQL スレッドをキルするようサーバーに指示します

  • multi_query - 複数のクエリを実行します

  • more_results - 実行した複数のクエリについて結果がまだ残ってるかどうかを確認します

  • next_result - 実行した複数のクエリから次の結果を読み込みます

  • options - オプションを設定します

  • ping - 指定したサーバー接続に ping を行い、接続がない場合には再接続します

  • prepare - SQL クエリをパースします

  • query - クエリを実行します

  • real_connect - MySQL データベースサーバーへの接続をオープンします

  • escape_string - 接続に使用する文字セットを考慮して SQL 命令が含まれる文字列の中の特殊文字をエスケープします

  • rollback - カレントのトランザクションをロールバックします

  • select_db - デフォルトのデータベースを選択します

  • set_charset - デフォルトのクライアント文字セットを設定します

  • ssl_set - SSL パラメータを設定します

  • stat - カレントのシステムステータスを取得します

  • stmt_init- mysqli_stmt_prepare で利用するステートメントを初期化します

  • store_result - 直近のクエリから結果セットを伝送します

  • thread_safe - スレッドセーフかどうかを返します

  • use_result - 直近のクエリからバッファリングされていない結果セットを伝送します

プロパティ

  • affected_rows - 直近の MySQL 操作で変更された行の数を取得します

  • client_info - MySQL クライアントのバージョンを文字列で返します

  • client_version - MySQL クライアントのバージョンを整数で返します

  • errno - 直近にコールされた関数のエラーコードを返します

  • error - 直近にコールされた関数のエラー文字列を返します

  • field_count - 直近のクエリのカラム数を返します

  • host_info - 使用されている接続の型を返します

  • info - 直近に実行されたクエリについての情報を取得します

  • insert_id - 直近のクエリで使用された、自動生成 ID を返します

  • protocol_version - 使用されている MySQL プロトコルのバージョンを返します

  • server_info - サーバのバージョン番号を表す文字列を返します

  • server_version - サーバのバージョン番号を整数値で返します

  • sqlstate - 直近のエラーについて、SQLSTATE エラーコードを含む文字列を返します

  • thread_id - カレントの接続のスレッド ID を返します

  • warning_count - 直近の SQL ステートメントの中で発生した警告の数を返します

mysqli_stmt

プリペアドステートメントを表します。

メソッド

  • bind_param - 変数をプリペアドステートメントにバインドします

  • bind_result - 結果を保存するため、変数をプリペアドステートメントにバインドします

  • close - プリペアドステートメントを閉じます

  • data_seek - ステートメント結果セットの任意の行に移動します

  • execute - プリペアドステートメントを実行します

  • fetch - プリペアドステートメントから結果を取得し、バインドした変数に保存します

  • free_result - 指定したステートメントハンドルの結果を保存しているメモリを開放します

  • prepare - SQL クエリを準備します

  • reset - プリペアドステートメントをリセットします

  • result_metadata - プリペアドステートメントから、メタ情報の結果セットを取得します

  • send_long_data - データを分割して送信します

  • store_result - プリペアドステートメントの結果をすべてメモリに保存します

プロパティ

  • affected_rows - 直近のステートメントの実行により更新された行数を返します

  • errno - 直近のステートメントのエラーコードを返します

  • error - 直近のステートメントのエラー文字列を返します

  • field_count - 結果セットのカラムの数を返します

  • id - ステートメントの ID を返します

  • insert_id - プリペアドステートメントで AUTO_INCREMENT のカラムに設定された値を返します

  • num_rows - 結果セットの行の数を返します

  • param_count - 指定したプリペアドステートメントのパラメータ数を返します

  • sqlstate - 直近のステートメントについて SQLSTATE エラーコードを含む文字列を返します

mysqli_result

データベースへのクエリにより得られた結果セットを表します。

メソッド

  • close - 結果セットを閉じます

  • data_seek - 内部の結果ポインタを移動します

  • fetch_array - 結果の行を連想配列・数値添字配列あるいはその両方で取得します

  • fetch_assoc - 結果の行を連想配列で取得します

  • fetch_field - 結果セットからカラムの情報を取得します

  • fetch_fields - 結果セットからすべてのカラムの情報を取得します

  • fetch_field_direct - 指定したカラムの情報を取得します

  • fetch_object - 結果の行をオブジェクトで取得します

  • fetch_row - 結果の行を数値添字の配列で取得します

  • field_seek - 結果ポインタを指定したフィールドオフセットに移動します

  • free_result - 結果のメモリを開放します

プロパティ

  • current_field - 現在のフィールドポインタのオフセットを返します

  • field_count - 結果セットのフィールド数を返します

  • lengths - カラムの長さの配列を返します

  • num_rows - 結果の行数を返します

  • type - MYSQLI_STORE_RESULT あるいは MYSQLI_USE_RESULT を返します

定義済み定数

表 2. MySQLi 定数

定数名説明
MYSQLI_READ_DEFAULT_GROUP (integer) `my.cnf' の指定した名前のグループか、あるいは MYSQLI_READ_DEFAULT_FILE で指定したファイルからオプションを読み込みます。
MYSQLI_READ_DEFAULT_FILE (integer) my.cnf のかわりに、指定したファイルからオプションを 読み込みます。
MYSQLI_OPT_CONNECT_TIMEOUT (integer) 接続のタイムアウトまでの秒数。
MYSQLI_OPT_LOCAL_INFILE (integer) LOAD LOCAL INFILE コマンドを有効にします。
MYSQLI_INIT_COMMAND (integer) MySQL サーバへの接続時に実行するコマンド。 再接続時にも自動的に再実行されます。
MYSQLI_CLIENT_SSL (integer) SSL(暗号化プロトコル)を使用します。このオプションは、アプリケーション プログラムで指定することはできず、MySQL クライアントライブラリの内部で設定します。
MYSQLI_CLIENT_COMPRESS (integer) 圧縮プロトコルを使用します。
MYSQLI_CLIENT_INTERACTIVE (integer) (wait_timeout のかわりに)interactive_timeout の秒数を使用できるように します。クライアントセッションの wait_timeout 変数の値は、interactive_timeout 変数の値に設定されます。
MYSQLI_CLIENT_IGNORE_SPACE (integer) 関数名に続く空白文字を許可します。すべての関数名を予約語とします。
MYSQLI_CLIENT_NO_SCHEMA (integer) db_name.tbl_name.col_name 形式の使用を禁止します。
MYSQLI_CLIENT_MULTI_QUERIES (integer)  
MYSQLI_STORE_RESULT (integer) 結果セットをバッファに格納します。
MYSQLI_USE_RESULT (integer) 結果セットをバッファに格納しません。
MYSQLI_ASSOC (integer) 行データを、カラム名をインデックスとする配列に格納して返します。
MYSQLI_NUM (integer) 行データを、数値インデックスの配列に格納して返します。
MYSQLI_BOTH (integer) 行データを、数値インデックス・カラム名インデックスの両方を 保持する配列に格納して返します。
MYSQLI_NOT_NULL_FLAG (integer) フィールドは、NOT NULL と定義されています。
MYSQLI_PRI_KEY_FLAG (integer) フィールドは、プライマリキーの一部です。
MYSQLI_UNIQUE_KEY_FLAG (integer) フィールドは、ユニークキーの一部です。
MYSQLI_MULTIPLE_KEY_FLAG (integer) フィールドは、インデックスの一部です。
MYSQLI_BLOB_FLAG (integer) フィールドは BLOB と定義されています。
MYSQLI_UNSIGNED_FLAG (integer) フィールドは UNSIGNED と定義されています。
MYSQLI_ZEROFILL_FLAG (integer) フィールドは ZEROFILL と定義されています。
MYSQLI_AUTO_INCREMENT_FLAG (integer) フィールドは AUTO_INCREMENT と定義されています。
MYSQLI_TIMESTAMP_FLAG (integer) フィールドは TIMESTAMP と定義されています。
MYSQLI_SET_FLAG (integer) フィールドは SET と定義されています。
MYSQLI_NUM_FLAG (integer) フィールドは NUMERIC と定義されています。
MYSQLI_PART_KEY_FLAG (integer) フィールドは、マルチインデックスの一部です。
MYSQLI_GROUP_FLAG (integer) フィールドは GROUP BY の一部です。
MYSQLI_TYPE_DECIMAL (integer) フィールドは DECIMAL と定義されています。
MYSQLI_TYPE_NEWDECIMAL (integer) 精密な DECIMAL あるいは NUMERIC のフィールドです (MySQL 5.0.3 以降)。
MYSQLI_TYPE_BIT (integer) フィールドは BIT と定義されています (MySQL 5.0.3 以降)。
MYSQLI_TYPE_TINY (integer) フィールドは TINYINT と定義されています。
MYSQLI_TYPE_SHORT (integer) フィールドは INT と定義されています。
MYSQLI_TYPE_LONG (integer) フィールドは INT と定義されています。
MYSQLI_TYPE_FLOAT (integer) フィールドは FLOAT と定義されています。
MYSQLI_TYPE_DOUBLE (integer) フィールドは DOUBLE と定義されています。
MYSQLI_TYPE_NULL (integer) フィールドは DEFAULT NULL と定義されています。
MYSQLI_TYPE_TIMESTAMP (integer) フィールドは TIMESTAMP と定義されています。
MYSQLI_TYPE_LONGLONG (integer) フィールドは BIGINT と定義されています。
MYSQLI_TYPE_INT24 (integer) フィールドは MEDIUMINT と定義されています。
MYSQLI_TYPE_DATE (integer) フィールドは DATE と定義されています。
MYSQLI_TYPE_TIME (integer) フィールドは TIME と定義されています。
MYSQLI_TYPE_DATETIME (integer) フィールドは DATETIME と定義されています。
MYSQLI_TYPE_YEAR (integer) フィールドは YEAR と定義されています。
MYSQLI_TYPE_NEWDATE (integer) フィールドは DATE と定義されています。
MYSQLI_TYPE_ENUM (integer) フィールドは ENUM と定義されています。
MYSQLI_TYPE_SET (integer) フィールドは SET と定義されています。
MYSQLI_TYPE_TINY_BLOB (integer) フィールドは TINYBLOB と定義されています。
MYSQLI_TYPE_MEDIUM_BLOB (integer) フィールドは MEDIUMBLOB と定義されています。
MYSQLI_TYPE_LONG_BLOB (integer) フィールドは LONGBLOB と定義されています。
MYSQLI_TYPE_BLOB (integer) フィールドは BLOB と定義されています。
MYSQLI_TYPE_VAR_STRING (integer) フィールドは VARCHAR と定義されています。
MYSQLI_TYPE_STRING (integer) フィールドは CHAR と定義されています。
MYSQLI_TYPE_GEOMETRY (integer) フィールドは GEOMETRY と定義されています。
MYSQLI_NEED_DATA (integer) バインド変数に、さらにデータを使用可能です。
MYSQLI_NO_DATA (integer) バインド変数に使用可能なデータがありません。
MYSQLI_DATA_TRUNCATED (integer) データのトランケーションが発生しました。PHP 5.1.0 および MySQL 5.0.5 以降で使用可能です。

MySQLI ドキュメンテーションのすべての例では、MySQL AB の world データベースを使用しています。これは http://dev.mysql.com/get/Downloads/Manual/world.sql.gz/from/pick にあります。

目次
mysqli_affected_rows -- 直前の MySQL の操作で変更された行の数を得る
mysqli_autocommit -- データベース更新の自動コミットをオンまたはオフにする
mysqli_bind_param -- mysqli_stmt_bind_param() のエイリアス
mysqli_bind_result -- mysqli_stmt_bind_result() のエイリアス
mysqli_change_user -- 指定されたデータベース接続のユーザ名を変更する
mysqli_character_set_name -- データベース接続のデフォルトの文字コードセットを返す
mysqli_client_encoding -- mysqli_character_set_name() のエイリアス
mysqli_close -- 事前にオープンしているデータベース接続を閉じる
mysqli_commit -- 現在のトランザクションをコミットする
mysqli_connect_errno -- 直近の接続コールに関するエラーコードを返す
mysqli_connect_error -- 直近の接続エラーの内容を文字列で返す
mysqli_connect -- 新規に MySQL サーバへの接続をオープンする
mysqli_data_seek -- 結果の任意の行にポインタを移動する
mysqli_debug -- デバッグ操作を行う
mysqli_disable_reads_from_master -- マスタからの読み込みを無効にする
mysqli_disable_rpl_parse -- RPL のパースを無効にする
mysqli_dump_debug_info -- デバッグ情報をログに出力する
mysqli_embedded_server_end -- 
mysqli_embedded_server_start -- 
mysqli_enable_reads_from_master -- マスタからの読み込みを有効にする
mysqli_enable_rpl_parse -- RPL のパースを有効にする
mysqli_errno -- 直近の関数コールによるエラーコードを返す
mysqli_error -- 直近のエラーの内容を文字列で返す
mysqli_escape_string -- mysqli_real_escape_string() のエイリアス
mysqli_execute -- mysqli_stmt_execute() のエイリアス
mysqli_fetch_array -- 結果の行を連想配列・数値添字配列あるいはその両方の形式で取得する
mysqli_fetch_assoc -- 結果の行を連想配列で取得する
mysqli_fetch_field_direct -- 単一のフィールドのメタデータを取得する
mysqli_fetch_field -- 結果セットの次のフィールドを返す
mysqli_fetch_fields -- 結果セットのフィールド情報をオブジェクトの配列で返す
mysqli_fetch_lengths -- 結果セットにおける現在の行のカラムの長さを返す
mysqli_fetch_object -- 結果セットの現在の行をオブジェクトとして返す
mysqli_fetch_row -- 結果の行を数値添字配列で取得する
mysqli_fetch -- mysqli_stmt_fetch() のエイリアス
mysqli_field_count -- 直近のクエリのカラムの数を返す
mysqli_field_seek -- 結果ポインタを、指定したフィールドオフセットに設定する
mysqli_field_tell -- 結果ポインタにおける現在のフィールドオフセットを取得する
mysqli_free_result -- 結果に関連付けられたメモリを開放する
mysqli_get_charset -- 文字セットオブジェクトを返す
mysqli_get_client_info -- MySQL クライアントのバージョンを文字列で返す
mysqli_get_client_version -- MySQL クライアント情報を取得する
mysqli_get_host_info -- 使用している接続の型を文字列で返す
mysqli_get_metadata -- mysqli_stmt_result_metadata() のエイリアス
mysqli_get_proto_info -- 使用している MySQL プロトコルのバージョンを返す
mysqli_get_server_info -- MySQL サーバのバージョンを返す
mysqli_get_server_version -- MySQL サーバのバージョンを整数値で返す
mysqli_get_warnings -- 
mysqli_info -- 直近に実行されたクエリの情報を取得する
mysqli_init -- MySQLi を初期化し、mysqli_real_connect() で使用するリソースを返す
mysqli_insert_id -- 直近のクエリで使用した自動生成の ID を返す
mysqli_kill -- サーバに MySQL スレッドの停止を問い合わせる
mysqli_master_query -- マスタ/スレーブ設定で、マスタ側のクエリを実行する
mysqli_more_results -- マルチクエリからの結果がまだ残っているかどうかを調べる
mysqli_multi_query -- データベース上でクエリを実行する
mysqli_next_result -- multi_query の、次の結果を準備する
mysqli_num_fields -- 結果のフィールド数を取得する
mysqli_num_rows -- 結果の行数を取得する
mysqli_options -- オプションを設定する
mysqli_param_count -- mysqli_stmt_param_count() のエイリアス
mysqli_ping -- サーバとの接続をチェックし、もし切断されている場合は再接続を試みる
mysqli_prepare -- 実行するための SQL ステートメントを準備する
mysqli_query -- データベース上でクエリを実行する
mysqli_real_connect -- mysql サーバとの接続をオープンする
mysqli_real_escape_string --  接続の現在の文字セットを考慮して、SQL 文で使用する文字列の 特殊文字をエスケープする
mysqli_real_query -- SQL クエリを実行する
mysqli_report -- 内部のレポート関数を有効あるいは無効にする
mysqli_rollback -- 現在のトランザクションをロールバックする
mysqli_rpl_parse_enabled -- RPL のパースが有効かどうかを確認する
mysqli_rpl_probe -- RPL の調査
mysqli_rpl_query_type -- RPL クエリの型を返す
mysqli_select_db -- クエリを実行するためのデフォルトのデータベースを選択する
mysqli_send_long_data -- mysqli_stmt_send_long_data() のエイリアス
mysqli_send_query -- クエリを送信する
mysqli_server_end -- 組み込みのサーバをシャットダウンする
mysqli_server_init -- 組み込みのサーバを初期化する
mysqli_set_charset -- クライアントのデフォルト文字セットを設定する
mysqli_set_local_infile_default -- load local infile コマンド用のユーザ定義ハンドラを削除する
mysqli_set_local_infile_handler -- LOAD DATA LOCAL INFILE コマンド用のコールバック関数を設定する
mysqli_set_opt -- mysqli_options() のエイリアス
mysqli_slave_query -- マスタ/スレーブ設定で、スレーブ側のクエリを実行する
mysqli_sqlstate -- 直前の MySQL の操作での SQLSTATE エラーを返す
mysqli_ssl_set -- SSL を使用したセキュアな接続を確立する
mysqli_stat -- 現在のシステム状態を取得する
mysqli_stmt_affected_rows -- 直近に実行されたステートメントで変更・削除・あるいは追加された行の総数を返す
mysqli_stmt_attr_get -- 
mysqli_stmt_attr_set -- 
mysqli_stmt_bind_param -- プリペアドステートメントのパラメータに変数をバインドする
mysqli_stmt_bind_result -- 結果を保存するため、プリペアドステートメントに変数をバインドする
mysqli_stmt_close -- プリペアドステートメントを閉じる
mysqli_stmt_data_seek -- ステートメントの結果セットの任意の行に移動する
mysqli_stmt_errno -- 直近のステートメントのコールに関するエラーコードを返す
mysqli_stmt_error -- 直近のステートメントのエラー内容を文字列で返す
mysqli_stmt_execute -- プリペアドクエリを実行する
mysqli_stmt_fetch -- プリペアドステートメントから結果を取得し、バインド変数に格納する
mysqli_stmt_field_count -- 指定したステートメントのフィールド数を返す
mysqli_stmt_free_result -- 指定したステートメントハンドルの結果を格納したメモリを開放する
mysqli_stmt_get_warnings -- 
mysqli_stmt_init -- ステートメントを初期化し、mysqli_stmt_prepare で使用するオブジェクトを返す
mysqli_stmt_insert_id -- 直近の INSERT 操作で生成した ID を取得する
mysqli_stmt_num_rows -- ステートメントの結果セットの行数を返す
mysqli_stmt_param_count -- 指定したステートメントのパラメータ数を返す
mysqli_stmt_prepare -- SQL ステートメントを実行するために準備する
mysqli_stmt_reset -- プリペアドステートメントをリセットする
mysqli_stmt_result_metadata -- プリペアドステートメントから結果セットのメタデータを返す
mysqli_stmt_send_long_data -- データをブロックで送信する
mysqli_stmt_sqlstate -- 直前のステートメントの操作での SQLSTATE エラーを返す
mysqli_stmt_store_result -- プリペアドステートメントから結果を転送する
mysqli_store_result -- 直近のクエリから結果セットを転送する
mysqli_thread_id -- 現在の接続のスレッド ID を返す
mysqli_thread_safe -- スレッドセーフであるかどうかを返す
mysqli_use_result -- 結果セットの取得を開始する
mysqli_warning_count -- 指定した接続の直近のクエリから発生した警告の数を返す