Forum und email

SDO_DAS_Relational::executeQuery

(No version information available, might be only in CVS)

SDO_DAS_Relational::executeQuery — SQL クエリをリレーショナルデータベースに対して実行し、 結果を正規化されたデータグラフ形式で返す

説明

SDODataObject SDO_DAS_Relational::executeQuery ( PDO $database_handle , string $SQL_statement [, array $column_specifier ] )
警告

この関数は、 実験的 なものです。この関数の動作・ 名前・その他ドキュメントに書かれている事項は、予告なく、将来的な PHP のリリースにおいて変更される可能性があります。 この関数は自己責任で使用してください。

クエリをリレーショナルデータベースに対して実行します。 実行には、渡された PDO データベースハンドルを使用します。 メタデータから作成されたモデルを使用し、結果セットを取得します。 結果をデータグラフとして返します。

パラメータ

PDO_database_handle

PDO 拡張モジュールを使用して作成します。 PDO データベースハンドルを作成する典型的な方法は、このようになります。

$dbh = new PDO("mysql:dbname=COMPANYDB;host=localhost",DATABASE_USER,DATABASE_PASSWORD);

SQL_statement

データベースに対して実行する SQL 文。

column_specifier

リレーショナル DAS では、結果セットの各カラムを調べ、 それがどのテーブルのどのカラムからきたものなのかを知る必要があります。 データ自身からそれらの情報を取得できる場合もありますが、 そうでない場合もあります。取得できない場合にはカラム指定子が必要となります。 これは、カラムを識別するための配列です。 配列の各項目は、単純な テーブル名.カラム名 形式の文字列となります。

カラム指定子が必要となるのは、 データベースのメタデータ内に同じ名前のカラムが複数ある場合です。 例で使用しているデータベースでは、すべてのテーブルに id および name のふたつのカラムがあります。 リレーショナル DAS が PDO から結果セットを読み込む際には、 属性 PDO_FETCH_ASSOC を使用できます。これは、 結果セットのカラム名をリレーショナル DAS のカラム名に対応させますが、 同じ名前の重複を識別できません。そのため、 これは、結果セットでカラム名が重複する可能性がない場合にのみ動作します。

まとめます。そのカラムがどのテーブルのものかが判別できなくなる 可能性が少しでもある場合には、カラム指定子の配列を設定します。 省略できるのは、データベースのメタデータ内にあるすべてのカラム名が 一意な場合のみです。

�合には、カラム指定子の配列を設定します。 省略できるのは、データベースのメタデータ内にあるすべてのカラム名が 一意な場合のみです。

で示したサンプルでは、すべてカラム指定子を設定しています。 インストール先の Scenarios ディレクトリ内に、カラム指定子を使用しない例がひとつあります。 これは employee テーブルだけを使用するものです。 ひとつのテーブルしか使用していないので、 カラム名が重複することがないわけです。

返り値

データグラフを返します。具体的には、特別な型のルートオブジェクトを返します。 このルートオブジェクトの下に、結果セットからのデータが格納されています。 ルートオブジェクトは複数の値を持つプロパティを持っており、 そのプロパティは、コンストラクタで指定した アプリケーションのルート型と同じ名前になります。 また、そのプロパティの内容は、 アプリケーションのルート型のオブジェクトとなります。

クエリがデータを返さなかった場合にも特別なルート型のオブジェクトが返されますが、 その中にあるアプリケーションルート型のプロパティの内容は空となります。

エラー / 例外

SDO_DAS_Relational::executeQuery() は、データグラフを正常に作成できなかった場合に SDO_DAS_Relational_Exception をスローします。 これが起こる原因は、いろいろ考えられます。例えば、 すべてのオブジェクトの結果セットで主キーがなかった場合などです。 また、何らかの PDO 例外が発生した場合には、 それをキャッチして PDO の診断情報を SDO_DAS_Relational_Exception に格納し、それをスローします。

このメソッドをコールする例については、リレーショナル DAS の全般的な情報の中にある の節を参照ください。