説明
PEAR MDB2 では、データベースに対するクエリを実行するために
いくつかのメソッドを用意しています。いちばん直接的なメソッドは
query() です。これは、SQL
クエリ文字列を引数として受け取ります。返り値には二通りの可能性があります。
結果を返すクエリ (SELECT など) が成功した場合には新しい
MDB2_Result オブジェクト、失敗した場合には
MDB2_Error オブジェクトを返します。
このメソッドは、データを操作するような文 (INSERT
など) に対して使用してはいけません。
例 39-1クエリの実行 <?php
// まずプログラムの最初に、$mdb2 という名前の
// MDB2 オブジェクトを作成します
require_once 'MDB2.php';
$mdb2 =& MDB2::connect('pgsql://usr:pw@localhost/dbnam');
if (PEAR::isError($mdb2)) {
die($mdb2->getMessage());
}
// クエリを実行します
$res =& $mdb2->query('SELECT * FROM clients');
// 結果がエラーでないかどうかを常にチェックします
if (PEAR::isError($res)) {
die($res->getMessage());
}
// 切断します
$mdb2->disconnect();
?> |
|
exec() は、
データを操作するクエリに対して使用します。
返り値には二通りの可能性があります。
データを操作する文 (INSERT など)
によって変更された行数を表す整数値か、失敗した際には
MDB2_Error オブジェクトを返します。
このメソッドは、結果を返すような文
(SELECT など) に対して使用してはいけません。
例 39-2exec を使用してデータを操作する <?php
// すでに $mdb2 という名前の MDB2 オブジェクトが存在するものとします
$sql = "INSERT INTO clients (name, address) VALUES ($name, $address)";
$affected =& $mdb2->exec($sql);
// 結果がエラーでないかどうかを常にチェックします
if (PEAR::isError($affected)) {
die($affected->getMessage());
}
?> |
|
データ型
MDB2 は、すべてのドライバにまたがる多くのデータ型をサポートしています。
これらは、それぞれ適切なメソッドを使用して結果セットに設定されます。
サポートされるデータ型とその書式についての概要は
こちら を参照ください。
結果の行数の制限および途中の行からの読み込み
結果セットの限定された行数のみを読み書きしたい場合、あるいは
結果セットの途中の行から読み込みを開始したい場合などは
setLimit() をコールしてからクエリを発行します。
limit および offset は、その次に実行するクエリ発行メソッド
あるいはプリペアドステートメントメソッドに対してのみ有効となり、
その後は設定がリセットされます。
これは、MDB2 が内部的に発行するクエリに対しても適用されます。
limit 機能をエミュレートで実現している RDBMS については、
DML 文では limit が動作しないことに注意しましょう。また、
この場合に何のエラーも発生しないことにも注意が必要です。
例 39-3setLimit を使用した query および exec <?php
// すでに $mdb2 という名前の MDB2 オブジェクトが存在するものとします
$sql = "SELECT * FROM clients";
// 10 行目から始め、20 行読み込みます
$mdb2->setLimit(20, 10);
$affected =& $mdb2->exec($sql);
$sql = "DELETE FROM clients";
if ($mdb2->supports('limit_queries') === 'emulated') {
echo 'offset の設定は無視されました'
}
// 10 行だけを削除します
$mdb2->setLimit(10);
$affected =& $mdb2->exec($sql);
?> |
|