Как пройти объект PDOStatement, т.е. получить первый, последний предыдущий следующий и т. Д.? - PullRequest
1 голос
/ 14 октября 2011

Я снова и снова пытаюсь получить доступ к данным на веб-странице.Есть ли способ лучше ?некоторые вещи, как 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;
    // } 
}

Ответы [ 3 ]

2 голосов
/ 14 октября 2011

Чтобы получить последний результат, вы можете сделать:

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

Или напишите номера строк вручную. Другие PDO::FETCH_ORI_* константы здесь , но по сути вы хотите уделить больше внимания второму и третьему параметру в PDOStatement :: fetch () метод.

1 голос
/ 14 октября 2011

Просто используйте 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
}
0 голосов
/ 11 ноября 2013

с PDO вам не нужно создавать запрос, чтобы получить предыдущий или следующий, попробуйте просто: PDO::CURSOR_SCROLL

ссылка (пример 2): http://php.net/manual/en/pdostatement.fetch.php

...