Цикл while при вызове mysql генерирует неизвестное исключение PDO «Общая ошибка» - PullRequest
2 голосов
/ 18 августа 2011

Я использую следующий (или похожий) код на сотнях созданных мной страниц:

$stmt = $db->prepare("SELECT * FROM table");
$stmt->execute();

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

    $id = $row['id'];
    $name = $row['name'];

    do something with data returned...


    $id = NULL;
    $name = NULL;

}

Из ниоткуда я начал получать следующую ошибку на нескольких страницах:

Неустранимая ошибка: необработанное исключение 'PDOException' с сообщением «SQLSTATE [HY000]: общая ошибка» в C: .... page.php: 28 трассировки стека: # 0 C: .. page.php (28): PDOStatement-> fetch () # 1 {main} брошено

Первый цикл будет запущен (без проблем), но выдает ошибку ПОСЛЕ первого цикла. Код ошибки (строка 28) ссылается на строку:

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

Я никогда не видел этого раньше. В качестве теста я изменил код, чтобы сохранить все возвращенные результаты как:

$stmt = $db->prepare("SELECT * FROM table");
$stmt->execute();

$rows = $stmt->fetchALL();

foreach($rows as $row) {

    $id = $row['id'];
    $name = $row['name'];

    do something with data returned...


    $id = NULL;
    $name = NULL;

}

и система работает. Есть идеи, почему?

Ответы [ 3 ]

5 голосов
/ 18 августа 2011

Примечание. После повторного просмотра области «сделать что-то» я понял, что инициализаторы базы данных ($ sql) были одинаковыми в операциях выбора и вставки / обновления в теле.Изменение их на уникальные значения устранило проблему.

Спасибо

3 голосов
/ 18 августа 2011

Если это не просто опечатка в вашем вопросе, ваш оператор стрелок неполон.

$stmt>execute();

// Should be
$stmt->execute();
2 голосов
/ 18 августа 2011
$stmt>execute();

Разве это не должно быть:

$stmt->execute();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...