クエリ

クエリ – クエリの実行

Description

PEAR MDB2 では、データベースに対するクエリを実行するために いくつかのメソッドを用意しています。いちばん直接的なメソッドは query() です。これは、SQL クエリ文字列を引数として受け取ります。返り値には二通りの可能性があります。 結果を返すクエリ (SELECT など) が成功した場合には新しい MDB2_Result オブジェクト、失敗した場合には MDB2_Error オブジェクトを返します。 このメソッドは、データを操作するような文 (INSERT など) に対して使用してはいけません。

クエリの実行

<?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 など) に対して使用してはいけません。

exec を使用してデータを操作する

<?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 が動作しないことに注意しましょう。また、 この場合に何のエラーも発生しないことにも注意が必要です。

setLimit を使用した query および exec

<?php
// すでに $mdb2 という名前の MDB2 オブジェクトが存在するものとします

$sql "SELECT * FROM clients";
// 10 行目から始め、20 行読み込みます
$mdb2->setLimit(2010);
$affected =& $mdb2->exec($sql);

$sql "DELETE FROM clients";
if (
$mdb2->supports('limit_queries') === 'emulated') {
    echo 
'offset の設定は無視されました'
}
// 10 行だけを削除します
$mdb2->setLimit(10);
$affected =& $mdb2->exec($sql);

?>

レンタルサーバー