LXXX. MaxDB PHP 拡張モジュール

導入

MaxDB PHP 拡張モジュールにより、MaxDB 7.5.0 以降にアクセスできるようになります。 MaxDB データベースサーバについての詳細な情報は http://www.mysql.com/products/maxdb/ で得られます。

MaxDB PHP 拡張モジュールは、MySQL の mysqli 拡張モジュールと互換性があります。 これらの間にはほんの少しの違いしかなく、その違いは MaxDB と MySQL の違いに基づくものです。

mysqli との主な相違点は、以下のようになります。

maxdb_character_set_name() - ascii あるいは unicode しか返しません。
maxdb_get_client_info() - 異なるバージョン文字列を返します。
maxdb_get_client_version() - 異なるバージョン文字列を返します。
maxdb_get_host_info() - localhost あるいはホスト名を返します。
maxdb_get_server_info() - 異なるバージョン文字列を返します。
maxdb_get_server_version() - 異なるバージョン文字列を返します。
maxdb_kill() - 単にセッションを切断するだけです。
maxdb_multi_query() - 複数の SQL 文を扱うことはできません。
maxdb_next_result() - 常に false を返します。
maxdb_options() - サポートするオプションが異なります。
maxdb_report() - サポートする繰り返しモードが異なります。
maxdb_stat() - 異なるシステム状態文字列を返します。
maxdb_stmt_store_result() - MaxDB では不要です。
maxdb_store_result() - MaxDB では不要です。

MaxDB についてのドキュメントは http://dev.mysql.com/doc/maxdb/ にあります。

要件

これらの関数を使用するには、MaxDB のサポートを有効にして PHP をコンパイルする必要があります。さらに、MaxDB サーバにアクセスするために MaxDB SQLDBC ランタイムライブラリが必要です。

MaxDB SQLDBC についてのドキュメントは http://dev.mysql.com/doc/maxdb/ にあります。

MaxDB SQLDBC パッケージは http://dev.mysql.com/downloads/maxdb/clients.html からダウンロードします。

インストール手順

設定オプション --with-maxdb[=DIR] を使用すると、PHP から MaxDB データベースへのアクセス機能が有効となります。 [DIR] には、MaxDB SQLDBC パッケージのインストールされているディレクトリを指定します。

Windows ユーザは、 php.ini の中で php_maxdb.dll を有効にする必要があります。

実行時設定

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

表 1. MaxDB 設定オプション

名前 デフォルト 変更の可否 変更履歴
maxdb.default_host NULL PHP_INI_ALL  
maxdb.default_db NULL PHP_INI_ALL  
maxdb.default_user NULL PHP_INI_ALL  
maxdb.default_pw NULL PHP_INI_ALL  
maxdb.long_readlen "200" PHP_INI_ALL  
PHP_INI_* 定数の詳細および定義については 付録G を参照してください。

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

maxdb.default_host string

データベースサーバへの接続時、ホスト名が指定されていない場合に 使用するデフォルトのホスト。

maxdb.default_db string

データベースが指定されていない場合に、 接続時に使用するデフォルトのサーバデータベース。

maxdb.default_user string

データベースサーバへの接続時、ユーザ名が指定されていない場合に 使用するデフォルトのユーザ名。

maxdb.default_pw string

データベースサーバへの接続時、パスワードが指定されていない場合に 使用するデフォルトのパスワード。

maxdb.long_readlen integer

MaxDB データベースサーバからロングデータを取得した場合に、 クライアントに転送される最大バイト数のデフォルト値。

定義済みクラス

maxdb

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

コンストラクタ

  • maxdb - 新しい maxdb オブジェクトを作成する

メソッド

  • autocommit - データベースの変更内容の自動コミット機能を有効あるいは無効にする

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

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

  • close - 事前にオープンされた接続を閉じる

  • commit - 現在のトランザクションをコミットする

  • connect - MaxDB データベースサーバへの新しい接続をオープンする

  • debug - デバッグ操作を実行する

  • dump_debug_info - デバッグ情報を出力する

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

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

  • get_server_info - MaxDB サーバのバージョンを返す

  • get_server_version - MaxDB サーバのバージョンを返す

  • init - maxdb オブジェクトを初期化する

  • info - 直近で実行されたクエリの情報を取得する

  • kill - MaxDB スレッドの終了をサーバに要求する

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

  • more_results - 現在実行している複数クエリに次の結果があるかどうかを調べる

  • next_result - 現在実行している複数クエリの次の結果を読み込む

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

  • ping - サーバとの接続を確認し、接続されていない場合には再接続する

  • prepare - SQL クエリを準備する

  • query - クエリを実行する

  • real_connect - MaxDB データベースサーバとの接続をオープンする

  • escape_string - 接続の現在の文字セットを考慮したうえで、SQL 文で使用する文字列の特殊文字をエスケープする

  • rollback - 現在のトランザクションをロールバックする

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

  • ssl_set - ssl パラメータを設定する

  • stat - 現在のシステム状態を取得する

  • stmt_init - maxdb_stmt_prepare で使用するステートメントを初期化する

  • store_result - 最後に実行したクエリの結果を転送する

  • use_result - 最後に実行したクエリのバッファ化されていない結果を転送する

  • thread-safe - スレッドセーフかどうかを返す

プロパティ

  • affected_rows - 直前の MaxDB 操作で変更された行数を取得する

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

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

  • errno - 直近の関数コールのエラーコードを返す

  • error - 直近の関数コールのエラー文字列を返す

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

  • host_info - 使用している接続の型を表す文字列を返す

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

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

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

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

  • thread_id - 現在の接続のスレッド ID を返す

  • warning_count - 直前の SQL 文の実行中に発生した警告の数を返す

maxdb_stmt

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

メソッド

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

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

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

  • data-seek - ステートメントの結果セットの任意の行に移動する

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

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

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

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

  • prepare - SQL クエリを準備する

  • send_long_data - データをチャンクに送る

  • close_long_data - long データの送信を終了する

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

  • store_result - プリペアドステートメントから結果セット全体をバッファに保存する

プロパティ

  • affected_rows - 直近のステートメントの実行で変更された行数を返す

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

  • errno - 直近のステートメントkな数のエラーメッセージを返す

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

  • sqlstate - 直近のステートメント関数の SQLSTATE エラーコードを含む文字列を返す

maxdb_result

データベースに対するクエリによって取得した結果セットを表します。

メソッド

  • close - 結果セットを閉じる

  • data_seek - 内部結果ポインタを移動する

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

  • fetch_fields - 結果セットの全てのカラムの情報を取得する

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

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

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

  • fetch_object - 結果の行をオブジェクトとして取得する

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

  • close - 結果のメモリを開放する

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

プロパティ

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

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

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

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

定義済み定数

以下の定数が定義されています。 この関数の拡張モジュールが PHP 組み込みでコンパイルされているか、 実行時に動的にロードされている場合のみ使用可能です。

以下の定数が、 maxdb_options() で使用するために定義されています。これらの定数についての詳細な情報は http://dev.mysql.com/doc/maxdb/ を参照ください。

表 2. MaxDB PHP クライアント定数

定数 説明
MAXDB_COMPNAME SQLDBC ランタイム環境を初期化するために使用するコンポーネント名。
MAXDB_APPLICATION データベースに接続しているアプリケーション。
MAXDB_APPVERSION アプリケーションのバージョン。
MAXDB_SQLMODE SQL モード。
MAXDB_UNICODE unicode (UCS2) クライアントによる接続の場合に TRUE、そうでない場合に FALSE。
MAXDB_TIMEOUT データベースへの接続がシステムによって閉じられるまでの 最大無活動時間。
MAXDB_ISOLATIONLEVEL 共有ロックおよび排他ロックを暗黙的に要求/開放するかどうか、 またどのように行うかを指定します。
MAXDB_PACKETCOUNT 接続に使用するリクエストパケットの数。
MAXDB_STATEMENTCACHESIZE 接続内での再利用のためにキャッシュされるプリペアドステートメントの数。
MAXDB_CURSORPREFIX 自動的に命名される結果テーブルに使用するプレフィックス。

maxdb_fetch_array() 関数は、 結果の配列の型を指定するために定数を使用します。 以下の定数が定義されています。

表 3. MaxDB フェッチ定数

定数 説明
MAXDB_ASSOC フィールド名をインデックスとする配列で、カラムを返します。
MAXDB_ASSOC_UPPER 大文字に変換したフィールド名をインデックスとする配列で、 カラムを返します。
MAXDB_ASSOC_LOWER 小文字に変換したフィールド名をインデックスとする配列で、 カラムを返します。
MAXDB_BOTH 数値インデックスおよびフィールド名インデックスの両方を含む配列で、 カラムを返します。
MAXDB_NUM フィールドの数値インデックスを持つ配列で、カラムを返します。 インデックスは 0 から始まり、これが結果の最初のフィールドを表します。

MaxDB PHP マニュアルの全ての例は、MaxDB から得られるデモデータベース HOTELDB を使用しています。このデータベースについての情報は http://dev.mysql.com/doc/maxdb/en/98/11b83fa6b33c17e10000000a114084/frameset.htm で得られます。

MaxDB PHP マニュアルのデータベースを使用するには、チュートリアルのデータを データベースに読み込む必要があります。その後、 php.ini の中の maxdb.default_db に、チュートリアルデータを含むデータベースを設定します。

この単純な例では、MaxDB データベースへの接続・クエリの実行・ 結果の行の表示・接続の切断の方法を示します。

例 1. MaxDB 拡張モジュールの概要

<?php
$link
= maxdb_connect ( "localhost" , "MONA" , "RED" , "DEMODB" );
   
/* 接続を調べます */
if ( maxdb_connect_errno ()) {
   
printf ( "接続に失敗しました: %s\n" , maxdb_connect_error ());
   exit();
}

/* SQL クエリを実行します */
$query = "SELECT * FROM hotel.city" ;
$result = maxdb_query ( $link , $query ) or die( "クエリに失敗しました: " . maxdb_error ());

/* 結果を HTML で表示します */
echo "<table>\n" ;
while (
$line = maxdb_fetch_array ( $result , MAXDB_ASSOC )) {
    echo
"  <tr>\n" ;
    foreach (
$line as $col_value ) {
        echo
"    <td>$col_value</td> \n " ;
    }
    echo
"  </tr>\n" ;
}
echo
"</table>\n" ;

/* 結果セットを開放します */
maxdb_free_result ( $result );

/* 接続を閉じます */
maxdb_close ( $link );
?>

以下の例では、SELECT INTO 文に変数をバインドする方法を示します。

例 2. SELECT INTO 文の使用例

<?php
$link
= maxdb_connect ( "localhost" , "MONA" , "RED" , "DEMODB" );

/* 接続を調べます */
if (! $link ) {
   
printf ( "接続に失敗しました: %s\n" , maxdb_connect_error ());
   exit();
}
   
/* SQL クエリを実行します */
$stmt = maxdb_prepare ( $link , "SELECT percentage INTO ? FROM hotel.countrylanguage where language = ?" );
if (!
$stmt ) {
  
printf ( "準備に失敗しました: %s\n" , maxdb_error ( $link ));
}

$name = "Mbundu" ;

maxdb_stmt_bind_param ( $stmt , 'ds' , $percentage , $name );
maxdb_stmt_execute ( $stmt );

printf ( "%f\n" , $percentage );

maxdb_stmt_close ( $stmt );
?>

以下の例では、MaxDB のプロシージャを使用する方法を示します。

例 3. データベースプロシージャの使用

<?php
$link
= maxdb_connect ( "localhost" , "MONA" , "RED" , "DEMODB" );

/* 接続を調べます */
if (! $link ) {
   
printf ( "接続に失敗しました: %s\n" , maxdb_connect_error ());
   exit();
}

maxdb_report ( MAXDB_REPORT_OFF );
maxdb_query ( $link , "DROP DBPROC test_proc" );
maxdb_report ( MAXDB_REPORT_ERROR );

$query = "create dbproc test_proc (INOUT e_text char(72)) AS select * from SYSDBA.DUAL; fetch into :e_text;" ;

maxdb_query ( $link , $query );

/* SQL クエリを実行します */
$stmt = maxdb_prepare ( $link , "CALL test_proc (?)" );
if (!
$stmt ) {
  
printf ( "準備に失敗しました: %s\n" , maxdb_error ( $link ));
}

maxdb_stmt_bind_param ( $stmt , 's' , $result );
maxdb_stmt_execute ( $stmt );

printf ( "%s\n" , $result );

maxdb_stmt_close ( $stmt );
?>

目次
maxdb_affected_rows  -- 直前の MaxDB の操作で変更された行数を取得する
maxdb_autocommit  -- データベースの変更内容の自動コミット機能を有効あるいは無効にする
maxdb_bind_param  --  maxdb_stmt_bind_param() のエイリアス
maxdb_bind_result  --  maxdb_stmt_bind_result() のエイリアス
maxdb_change_user  -- 指定したデータベース接続のユーザを変更する
maxdb_character_set_name  -- データベース接続のデフォルトの文字セットを返す
maxdb_client_encoding  --  maxdb_character_set_name() のエイリアス
maxdb_close_long_data  --  maxdb_stmt_close_long_data() のエイリアス
maxdb_close  -- 事前にオープンされたデータベース接続を閉じる
maxdb_commit  -- 現在のトランザクションをコミットする
maxdb_connect_errno  -- 直近の接続コールのエラーコードを返す
maxdb_connect_error  -- 直近の接続エラーについての説明を文字列で返す
maxdb_connect  -- MaxDB サーバへの新しい接続をオープンする
maxdb_data_seek  -- 結果ポインタを、結果の任意の行に移動する
maxdb_debug  -- デバッグ操作を行う
maxdb_disable_reads_from_master  -- マスタからの読み込みを無効にする
maxdb_disable_rpl_parse  -- RPL のパースを無効にする
maxdb_dump_debug_info  -- デバッグ情報をログに出力する
maxdb_embedded_connect  -- 組み込み MaxDB サーバへの接続をオープンする
maxdb_enable_reads_from_master  -- マスタからの読み込みを有効にする
maxdb_enable_rpl_parse  -- RPL のパースを有効にする
maxdb_errno  -- 直近の関数コールのエラーコードを返す
maxdb_error  -- 直近のエラーについて説明する文字列を返す
maxdb_escape_string  --  maxdb_real_escape_string() のエイリアス
maxdb_execute  --  maxdb_stmt_execute() のエイリアス
maxdb_fetch_array  -- 結果の行を連想配列、数値添字配列あるいはその両方で取得する
maxdb_fetch_assoc  -- 結果の行を連想配列として取得する
maxdb_fetch_field_direct  --  単一のフィールドのメタデータを取得する
maxdb_fetch_field  -- 結果セットの次のフィールドを返す
maxdb_fetch_fields  -- 結果セット内のフィールドを表すリソースの配列を返す
maxdb_fetch_lengths  -- 結果セットの現在の行のカラムの長さを返す
maxdb_fetch_object  -- 結果セットの現在の行をオブジェクトとして返す
maxdb_fetch_row  -- 結果の行を数値添字の配列として取得する
maxdb_fetch  --  maxdb_stmt_fetch() のエイリアス
maxdb_field_count  -- 直近のクエリのカラム数を返す
maxdb_field_seek  --  結果ポインタを、指定したフィールドオフセットに移動する
maxdb_field_tell  --  結果ポインタの現在のフィールドオフセットを取得する
maxdb_free_result  -- 結果に関連付けられたメモリを開放する
maxdb_get_client_info  -- MaxDB クライアントのバージョンを文字列で返す
maxdb_get_client_version  -- MaxDB クライアントの情報を取得する
maxdb_get_host_info  -- 使用している接続の型を表す文字列を返す
maxdb_get_metadata  --  maxdb_stmt_result_metadata() のエイリアス
maxdb_get_proto_info  -- 使用している MaxDB プロトコルのバージョンを返す
maxdb_get_server_info  -- MaxDB サーバのバージョンを返す
maxdb_get_server_version  -- MaxDB サーバのバージョンを整数値で返す
maxdb_info  -- 直近に実行したクエリについての情報を取得する
maxdb_init  --  MaxDB を初期化し、maxdb_real_connect で使用するリソースを返す
maxdb_insert_id  -- 直近のクエリで使用した、自動生成 ID を返す
maxdb_kill  -- MaxDB サーバから切断する
maxdb_master_query  -- マスタ/スレーブ構成において、クエリをマスタ側で実行することを強制する
maxdb_more_results  -- 複数クエリの結果の中に結果セットがまだあるかどうかを調べる
maxdb_multi_query  -- データベース上でクエリを実行する
maxdb_next_result  -- multi_query の、次の結果を準備する
maxdb_num_fields  --  結果のフィールド数を取得する
maxdb_num_rows  --  結果の行数を取得する
maxdb_options  -- オプションを設定する
maxdb_param_count  --  maxdb_stmt_param_count() のエイリアス
maxdb_ping  --  サーバとの接続を確認し、接続が確立されていない場合は再接続を試みる
maxdb_prepare  --  後で実行するための SQL 文を準備する
maxdb_query  -- データベース上でクエリを実行する
maxdb_real_connect  -- MaxDB サーバへの接続をオープンする
maxdb_real_escape_string  --  現在の接続の文字セットを考慮したうえで、 SQL 文で使用される文字列中の特殊文字をエスケープする
maxdb_real_query  -- SQL クエリを実行する
maxdb_report  -- 内部のレポート関数を有効あるいは無効にする
maxdb_rollback  -- 現在のトランザクションをロールバックする
maxdb_rpl_parse_enabled  -- RPL のパースが有効かどうかを調べる
maxdb_rpl_probe  -- RPL を調べる
maxdb_rpl_query_type  -- RPL クエリ型を返す
maxdb_select_db  -- データベースクエリ用のデフォルトデータベースを選択する
maxdb_send_long_data  --  maxdb_stmt_send_long_data() のエイリアス
maxdb_send_query  -- クエリを送信する
maxdb_server_end  -- 埋め込みサーバをシャットダウンする
maxdb_server_init  -- 埋め込みサーバを初期化する
maxdb_set_opt  --  maxdb_options() のエイリアス
maxdb_sqlstate  -- 直近の MaxDB 操作の SQLSTATE エラーを返します
maxdb_ssl_set  -- SSL を使用したセキュアな接続を確立するために使用する
maxdb_stat  -- 現在のシステム状態を取得する
maxdb_stmt_affected_rows  --  直近のステートメントによって変更、削除 あるいは挿入された行の数を返す
maxdb_stmt_bind_param  -- プリペアドステートメントに、変数をパラメータとしてバインドする
maxdb_stmt_bind_result  -- 結果を保存するために、変数をプリペアドステートメントにバインドする
maxdb_stmt_close_long_data  --  maxdb_stmt_send_long_data() のシーケンスを終了する
maxdb_stmt_close  -- プリペアドステートメントを閉じる
maxdb_stmt_data_seek  -- ステートメントの結果セットの、任意の行に移動する
maxdb_stmt_errno  -- 直近のステートメントコール時のエラーコードを返す
maxdb_stmt_error  -- 直近のステートメントコール時のエラー文字列を返す
maxdb_stmt_execute  -- プリペアドクエリを実行する
maxdb_stmt_fetch  --  プリペアドステートメントの結果を取得し、バインド変数に格納する
maxdb_stmt_free_result  -- 指定したステートメントハンドルの結果を保存しているメモリを開放する
maxdb_stmt_init  --  ステートメントを初期化し、maxdb_stmt_prepare で使用するリソースを返す
maxdb_stmt_num_rows  -- ステートメントの結果セットの行数を返す
maxdb_stmt_param_count  -- 指定したステートメントのパラメータ数を返す
maxdb_stmt_prepare  --  後で実行するための SQL 文を準備する
maxdb_stmt_reset  -- プリペアドステートメントをリセットする
maxdb_stmt_result_metadata  -- プリペアドステートメントから、結果セットのメタデータを返す
maxdb_stmt_send_long_data  -- データを複数ブロックで送信する
maxdb_stmt_sqlstate  -- 事前のステートメントの捜査からの SQLSTATE エラーを返す
maxdb_stmt_store_result  -- プリペアドステートメントから結果を転送する
maxdb_store_result  -- 直近のクエリから結果セットを転送する
maxdb_thread_id  -- 現在の接続のスレッド ID を返す
maxdb_thread_safe  -- スレッドセーフであるかどうかを返す
maxdb_use_result  -- 結果セットの取得を開始する
maxdb_warning_count  -- 指定したリンクの直近のクエリで発生した警告の数を返す