mixed &limitQuery (
string $query
,
integer $from
,
integer $count
,
mixed $params = array()
)
SQL クエリを実行しますが、指定した行数のみしか取得しません。 MySQL の LIMIT オプションの挙動をエミュレートしたものです。
$query
SQL クエリ。
$from
取得を開始する行。 最初の行が 0、2 番目の行が 1、といったようになることに 注意しましょう。
$count
取得する行数。
$params
プリペアドステートメントに適用する配列・文字列あるいは数値のデータ。 渡す項目数は、文中のプレースホルダの数と一致していなければなりません。 プレースホルダがひとつだけの場合は配列でない値を指定し、 複数存在する場合は個々の値を要素にもつ配列を指定します。
mixed - 結果を返すクエリ (例えば SELECT クエリなど) の場合は新しい DB_result オブジェクト、 データを操作するクエリ (例えば INSERT クエリなど) の場合は DB_OK、 あるいは失敗した場合には DB_Error オブジェクトを返します。
エラーコード | エラーメッセージ | 原因 | 対応法 |
---|---|---|---|
DB_ERROR_NODBSELECTED | no database selected | データベースが選択されていません。 | connect() の際の DSN を調べます。 |
その他のエラーコード | データベース固有のエラー。 | PHP マニュアル のデータベース関連の部分を調べ、エラーの原因を判断してください。 たいていの場合は SQL 文が間違っていることが原因です。例えば Oracle データベースに対して SQL で LIMIT を使用しているなどが 考えられます。 |
This function can not be called statically.
データベースの種類によっては、 query() に比べてそれほど速度が速くならないこともあります。 limitQuery() の利点は、 結果セット内の不要な行をできるだけ早いうちに削除しておけるという点にあります。 これにより、メモリの消費量を減らすことができます。
また、$from
と $count
はエスケープされないことに注意しましょう。
入力値のエスケープは自己責任で行う必要があります。
さもないと、SQL インジェクション攻撃に対して脆弱になってしまいます。
limitQuery() の使用法
<?php
// $db という名前の DB オブジェクトを取得しているとします...
$res =& $db->limitQuery('SELECT * FROM foo', 49, 10);
if (PEAR::isError($res)) {
die($res->getMessage());
}
?>