Forum und email

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

導入

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

MySQL に関するドキュメントは » https://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 に含まれています)、お勧めしません。

注意: MySQL 5 に接続する際は、 » https://dev.mysql.com/downloads/connector/php/ からバイナリをダウンロードすることを推奨します。

(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 の設定により動作が変化します。

MySQLi 設定オプション
名前 デフォルト 変更の可否 変更履歴
mysqli.max_links "-1" PHP_INI_SYSTEM PHP 5.0.0 以降で使用可能です。
mysqli.default_port "3306" PHP_INI_ALL PHP 5.0.0 以降で使用可能です。
mysqli.default_socket NULL PHP_INI_ALL PHP 5.0.0 以降で使用可能です。
mysqli.default_host NULL PHP_INI_ALL PHP 5.0.0 以降で使用可能です。
mysqli.default_user NULL PHP_INI_ALL PHP 5.0.0 以降で使用可能です。
mysqli.default_pw NULL PHP_INI_ALL PHP 5.0.0 以降で使用可能です。

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

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

プロセス毎の 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 を返します

定義済み定数

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 データベースを使用しています。これは » https://dev.mysql.com/get/Downloads/Manual/world.sql.gz/from/pick にあります。

目次