pdo fetch внутри ошибки извлечения

0

Я пытаюсь запустить следующий script (безуспешно):

$variables = $db->query("SELECT * FROM table1 WHERE Session_ID = '$sess1'");

while($row = $variables->fetch()) {

//FETCH DATA
$id= $row["ID"];
$info = $db->query("SELECT * FROM table2 WHERE ID = $id");

while($row2 = $info->fetch()) { 
    $name = $row2["FNAME"]." ".$row2["LNAME"]; }
    $phone = $row2["PHONE"];
}

//SEND CUSTOMER EMAIL
require("../email/email.php");                      
}

это возвращает ошибку: Неустранимая ошибка: вызов функции-члена fetch() для не-объекта в...

Пока я могу "решить" проблему, она уродлива. По сути, я должен сделать несколько вызовов перед тем, что я пытаюсь сделать ниже (что теоретически должно работать).

Любые идеи?

Теги:
fetch
pdo

2 ответа

0
Лучший ответ

Насколько я могу судить, вам нужно извлечь все результаты из набора результатов, прежде чем вы сможете отправить новый запрос. Если вы используете MySQL, вы можете обойти это, вызвав $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,true);, но я бы советовал против него, так как он делает ваш код менее портативным и на основных плюсах PDO, абстракции базы данных теряется.

  • 0
    Спасибо Wrikken - мне не нравится мое решение, но оно довольно быстрое и работает, так что я пойду с ним сейчас, я думаю!
  • 0
    Примечание: я знаю, что с mysqli вы можете использовать сохраненные результаты (возможно, вы можете использовать и с PDO, но я пока не смог найти его)
Показать ещё 1 комментарий
0

попробуйте это вместо

    //prepare the query
    $variables = $db->prepare("SELECT * FROM table1 WHERE Session_ID = :sess1");
    $info = $db->prepare("SELECT * FROM table2 WHERE ID = :ID");

    //bind the variable :sess1 to $sess1
    $variables->bindParam(':sess1', $sess1, PDO::PARAM_STR);

    //execute the query 
    $variables->execute;

    //fetch the result
    $result = $variables->fetch(PDO::FETCH_ASSOC);

    //set $result['ID'] to a variable and bind it to the variable :ID in our second query
    $id = $result['ID'];
    $info->bindParam(':ID', $id, PDO::PARAM_INT);

    while($row2 = $info->fetch()) { 
        $name = $row2["FNAME"]." ".$row2["LNAME"]; }
        $phone = $row2["PHONE"];
    }

    //SEND CUSTOMER EMAIL
    require("../email/email.php");                      
    }
  • 0
    к сожалению, нет; Ошибка разбора: синтаксическая ошибка, неожиданный T_ECHO, ожидаемый T_CATCH
  • 0
    Хм, насколько я вижу, вы изменяете запросы только в подготовленных выражениях (что в порядке, но не относится к делу), + забывая вызывать команду execute . Как это решит проблему?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню