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

# LXXV. 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 - 直近のステートメントｋな数のエラーメッセージを返す

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

前のページ | ホーム | 次のページ
tanh | 上に戻る | maxdb_affected_rows