Mysql pdo Перемещение внутреннего указателя в результате запроса

Boris

Новичок
Добрый день !
Подскажите что я делаю не так?
Раньше чтобы переместить указатель использовал функцию :
mysqli_data_seek($result, 0)
теперь использую pdo
Код:
$stmt = $bd->prepare('SELECT * FROM tbl WHERE id = :id_type', array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
$stmt->bindParam(':id_type', $id_type, PDO::pARAM_INT);
$result = $stmt->execute();
while($row = $stmt->fetch(PDO::FETCH_LAZY))
{
//какой-то код
}
$stmt->fetch(PDO::FETCH_ORI_ABS,0);
в конце мне надо вернуться к нулевой строке, но увы
Спасибо!
 
Последнее редактирование:

Boris

Новичок
@AnrDaemon, спасибо, не понял вашей ссылки, если не можете конкретней ответить, прошу не отвечайте на мой вопрос и вообще прошу Вас уважаемый @AnrDaemon, игнорируйте мои вопросы задаваемые на этом форуме, в последнем нашем общении я Вам дал понять , что Ваши ответы для меня не понятны, не утруждайте себя. Спасибо
 

AnrDaemon

Продвинутый новичок
До Штирлица не дошла шифровка из центра. Он перечитал её ещё раз, но она по-прежнему не дошла…

Какая буква в слове "используйте fetchAll()" вам показалась незнакомой?
 

Boris

Новичок
опять шарады. люди, НЕ ЛЮБИТЕЛИ ЗАГАДОК, подскажите как мне исправить приведенный выше код, чтобы вернуться у первой строке. пожалуйста
 

Boris

Новичок
подскажите, у меня вот такая конструкция:
Код:
while ($row = $stmt_properties->fetch(PDO::FETCH_LAZY))
{
    $result_values = $stmt_values->fetchAll();
    if($row->properties_type == 1)
   {
       foreach($result_values as $key => $value)
       {
       }
   }
}
первый раз условие if срабатывает, при повторном $row->properties_type == 1 нет.
как я понял, чтобы повторно пробегать по результату из бд надо использовать fetchAll.
по $stmt_properties я бегу, перебираю строку за строкой, один раз, а по $stmt_values я должен бежать столько раз, сколько properties_type == 1.
что то не получается, не могу разобраться в синтаксисе PDO, а отступать не хочется.
подскажите, что не так в логике или я не так использую функции?
 

Фанат

oncle terrible
Команда форума
PHP:
$stmt = $bd->prepare('SELECT * FROM tbl WHERE id = ?');
$stmt->execute([$id_type]);
$result = $stmt->fetchAll();
foreach($result as $row)
{
    // выводим первый раз
}
foreach($result as $row)
{
    // выводим второй раз
}
foreach($result as $row)
{
    // выводим снова
}
foreach($result as $row)
{
    // выводим опять
}
foreach($result as $row)
{
    // эх раз
}
foreach($result as $row)
{
    // еще раз
}
foreach($result as $row)
{
    // еще много-много раз
}
интересно, хоть сейчас дойдет?
 

Boris

Новичок
@Фанат, да я понял про fechAll
Код:
$result_values = $stmt_values->fetchAll();
    if($row->properties_type == 1)
   {
       foreach($result_values as $key => $value)
       {
       }
   }
у меня цикл в цикле
я по первому селекту бегу один раз а по второму несколько
 

Вурдалак

Продвинутый новичок
Борис, на этом форуме много нетерпимости и я бы советовал обратиться на более адекватный форум. А здесь тебя сейчас отпинают. И правильно сделают.
 

Boris

Новичок
Извлечение следующей строки из результирующего набора fetch()
Возвращает массив, содержащий все строки результирующего набора fetchAll()
$row = $stmt_properties->fetch(PDO::FETCH_LAZY) - для внешнего цикла
$result_values = $stmt_values->fetchAll(); для внутреннего цикла
ЧТО НЕ ТАК?
пинайте
 

Andkorol

Новичок
Основной идеи ты так и не понял.
Это нужно вынести из цикла:
PHP:
$result_values = $stmt_values->fetchAll();
Дальше просто юзай $result_values как и где угодно, пока не надоест.
 

Boris

Новичок
пипец, это сказывается не внимательность, видел же кучу примеров и все равно начиная писать внутренний цикл, fetchAll оставлял внутри.
@Andkorol, спасибо Вам большое
исправил, но тот же результат, первый раз работает а потом нет
Код:
$result_values = $stmt_values->fetchAll();
while ($row = $stmt_properties->fetch(PDO::FETCH_LAZY))
{
    if($row->properties_type == 1)
   {
       foreach($result_values as $key => $value)
       {
       }
   }
}
 

AnrDaemon

Продвинутый новичок
Что именно не работает?…
Почему вы к $row обращаетесь как к объекту?
Даже не столько почему, сколько зачем?
 

Boris

Новичок
@AnrDaemon, ну да можно так
$row[properties_type] == 1 Вы правы, надо отделять ооп от работы с массивом.
после прогулки проверил еще раз код нашел ошибку, мой касяк , не связанный с fetchAll()

Спасибо всем, помогли разобраться!
P.S. @AnrDaemon, без обид, всех благ Вам, и спасибо за ответы.
 
Сверху