как использовать 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);
Если вы хотите результат 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-й элемент в качестве объекта без дополнительных вычислений накладных расходов.