1

Web ページでデータに何度もアクセスしようとしています。より良い方法はありますか?movetofirst()、movetolast()、movetoprevious()、movetonext() のようなものがいいかもしれません。

現在、結果セットを配列として取得し(fetchall()を使用)、配列を何度も再利用しています。

以下のようなことはありますか?クエリを何度も実行する必要はありません。結果/配列が数百行の場合、データを配列に保持し、リソースを消費します。

$sql = 'SELECT cityname, statename FROM TBLPLACES ORDER BY cityname, statename';
$stmt = $conn->query($sql);
if ($stmt) {
    while($row=$stmt->fetch()){
       // do some thing
    }

    // do some more thing
    //
    // now here, can i access same $stmt object
    // to fetch resultset again without executing
    // $stmt = $conn->query($sql); again ?
    // (no change in query sql, need to fetch the same static data again.)
    //
    // something like below will be nice.
    //
    // $stmt->movetofirst();
    // while($row=$stmt->fetch()){
    //   do some thing;
    // } 
}
4

3 に答える 3

2

最後の結果を取得するには、次のようにします。

$row = $stmt->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_LAST);

または、行番号を手動で書きます。その他のPDO::FETCH_ORI_*定数はここにありますが、基本的にはPDOStatement::fetch()メソッドの 2 番目と 3 番目のパラメーターにもっと注意を払う必要があります。

于 2011-10-14T13:01:27.097 に答える
1

fetchAll配列全体の結果を取得するために使用するだけです。

$sql = 'SELECT cityname, statename FROM TBLPLACES ORDER BY cityname, statename';
$stmt = $conn->query($sql);
// You should not silently ignore errors.
// Set PDO error mode to PDO::ERRMODE_EXCEPTION to handle query failure
$data = $stmt->fetchAll();

foreach ($data as $row) {
  // Do one thing
}
foreach ($data as $row) {
  // Do another thing
}
于 2011-10-14T12:57:11.137 に答える
0

PDO を使用すると、前または次を取得するためにクエリを作成する必要はありません。juste を試してください。 PDO::CURSOR_SCROLL

参照 (例 2): http://php.net/manual/en/pdostatement.fetch.php

于 2013-11-11T10:48:19.767 に答える