как использовать MySQL data seek с PDO?

Я хочу использовать mysql_data_seek с PDO из поиска google я обнаружил, что он должен выглядеть так:

$row0 = $result->fetch(PDO::FETCH_ASSOC, PDO::FETCH_ORI_ABS, 0);

однако это не работа, что я делаю неправильно? вот мой код:

$query = "SELECT name,age FROM users";
$q = $db->prepare($query);
$q->execute();

$q->setFetchMode(PDO::FETCH_ASSOC);
$arrayData = $q->fetchAll();

foreach ($arrayData as $row){

    echo $row['name'] ." ";
    echo $row['age'] ."<br>";
}

$result = $q->fetch(PDO::FETCH_OBJ,PDO::FETCH_ORI_ABS,4);
var_dump($result);

Я просто хочу получить 5-ю строку в форме объекта из последнего запроса запуска. Я не хочу снова запускать этот запрос (как мне сказали некоторые ребята), мне просто нужны результаты из SQL buffer.

результатом var_dump является: bool (false)

любой идеи?

EDIT:

спасибо за ваши ответы и извините, но, возможно, я не объясняю себя также. Мне нравится трюк с JSON, но дело в том, что 5-я строка является примером. Я просто хочу использовать результат запроса из буфера с PDO точно так же, как я сделал это с mysql_data_seek в обычном mysql (измените курсор). возможно ли это? Мне нравятся все трюки, но это не то, что я ищу.

4 ответов


значение по умолчанию PDO 'cursor' -PDO:: CURSOR_FWDONLY это означает, что курсор не может вернуться к нулю, как это происходит с mysql_data_seek, чтобы позволить курсору вернуться к нулю, необходимо определить использование "прокручиваемого курсора"

пример:

$db->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));

перед использованием его следующим образом:

$row0 = $result->fetch(PDO::FETCH_ASSOC, PDO::FETCH_ORI_ABS, 0);

$result = $arrayData[4];

все, что вам нужно.


Если вы хотите результат 5-й строки, вы можете сделать так:

$result = json_decode(json_encode($arrayData[4]), FALSE);
var_dump($result);

или что-то вроде этого:

$object = new stdClass();
foreach ($array as $key => $value)
{
    $object->$key = $value;
}

просто интересно! зачем вам нужна форма объекта?

EDIT (это даст форму объекта 5-й строки):

$index = 0;
$fifthRow = new stdClass();
while($row = $q->fetch())
{
   if($index++==4)
        $fifthRow = json_decode(json_encode($row), FALSE);
}   

вы можете сделать это так:

$c = 1;
$saved=null; 
while($row = $q->fetch()){
    if($c==4){
        $saved = clone $row;
    };
    $c++;
    somethingelse;
}

$ saved будет содержать 4-й элемент в качестве объекта без дополнительных вычислений накладных расходов.