PDO Error – PDOException 'с сообщением' SQLSTATE : общая ошибка '

Я получаю эту ошибку:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error' in ... 

..когда я выполняю этот код с PDO:

  //Select data from the topic. $s = $dbh->prepare("SELECT * FROM forum_topics WHERE forum_id=:forum_cat_id AND topic_id=:topicid"); $s->bindParam(':forum_cat_id', $forum_cat_id); $s->bindParam(':topicid', $topicid); $s->execute(); $f= $s->fetch(); $s = $dbh->prepare("UPDATE forum_cats SET forum_last_postid=:last_post_id, forum_last_posttime=:time, forum_last_userid=:userid, forum_last_username=:username, forum_posts=forum_posts+1 WHERE forum_id=:forum_cat_id"); $s->bindParam(':last_post_id', $last_post_id); $s->bindParam(':time', $time); $s->bindParam(':userid', $userid); $s->bindParam(':username', $userdata['username']); $s->bindParam(':forum_cat_id', $forum_cat_id); try { $s->execute(); } catch(PDOException $e) { die($e->getMessage()); } if(count($s->fetchAll()) == 0) return 3; 

Я понятия не имею, почему это происходит. Я проверил запрос, и я просто не могу найти никаких ошибок.

Вот что происходит:

  • Вы пытаетесь получить запрос UPDATE. Вы не можете этого сделать, потому что запросы UPDATE не возвращают значения. Если вы хотите узнать, сколько строк повлияло на запрос, используйте функцию rowCount (). Обратите внимание, что не все драйверы DB предоставляют затронутые строки.

  • Вы используете необъявленные переменные (по крайней мере, в коде, который вы разместили здесь). Это не причина этой конкретной ошибки, но может генерировать другие.

  • Вы не используете данные, которые вы выбрали из базы данных

    Кроме того, рекомендуется делать все операции PDO в блоке try, иначе вы можете получить необработанные исключения.

Для других, которые пришли сюда, пытаясь расшифровать это эзотерическое сообщение об ошибке, как и я, позвольте мне добавить следующее:

Пытается запускать выборки в выражениях pdo, например:

 $statement->fetchAll(); 

или

 $statement->fetchAll(PDO::FETCH_ASSOC); 

… после того, как INSERT или UPDATE ** может вызвать эту ошибку (поскольку нет данных для извлечения ).

** Исключение составляет утверждение UPDATERETURNING ….