{"id":423,"date":"2009-09-09T11:51:09","date_gmt":"2009-09-09T10:51:09","guid":{"rendered":"http:\/\/www.thomaskeller.biz\/blog\/?p=423"},"modified":"2010-09-24T17:53:38","modified_gmt":"2010-09-24T16:53:38","slug":"fixing-mysql-pdo-error-2014","status":"publish","type":"post","link":"https:\/\/www.thomaskeller.biz\/blog\/2009\/09\/09\/fixing-mysql-pdo-error-2014\/","title":{"rendered":"Fixing MySQL \/ PDO error 2014"},"content":{"rendered":"<p>The following error on my current project at work really gave me lots of headaches today:<\/p>\n<p>    SQLSTATE[HY000]: General error: 2014 Cannot execute queries<br \/>\n    while other unbuffered queries are active. Consider using<br \/>\n    PDOStatement::fetchAll().<br \/>\n    Alternatively, if your code is only ever going to run against<br \/>\n    mysql, you may enable query buffering by setting the<br \/>\n    PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.<\/p>\n<p>So, yes, I already have <code>PDO::MYSQL_ATTR_USE_BUFFERED_QUERY<\/code> set to <code>TRUE<\/code>, so why is PDO still complaining? And especially why it is complaining now, because the same code which triggered the error today ran without problems for the past 9 months?<\/p>\n<p>After struggling a lot I found the cause: I missed to close a statement which was reused in a loop!<\/p>\n<p>So take care that you always call <code>PDOStatement->closeCursor()<\/code> in use cases like this:<\/p>\n<p>    $stmt = $con->prepare(&#8220;SELECT * FROM doodle WHERE id = ?&#8221;);<\/p>\n<p>    foreach (range(1,10) as $id)<br \/>\n    {<br \/>\n       $stmt->execute(array($id));<br \/>\n       $row = $stmt->fetch();<br \/>\n       $stmt->closeCursor();<br \/>\n    }<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The following error on my current project at work really gave me lots of headaches today: SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute. So, &hellip; <a href=\"https:\/\/www.thomaskeller.biz\/blog\/2009\/09\/09\/fixing-mysql-pdo-error-2014\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Fixing MySQL \/ PDO error 2014<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,11],"tags":[],"class_list":["post-423","post","type-post","status-publish","format-standard","hentry","category-coding","category-work"],"_links":{"self":[{"href":"https:\/\/www.thomaskeller.biz\/blog\/wp-json\/wp\/v2\/posts\/423","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.thomaskeller.biz\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.thomaskeller.biz\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.thomaskeller.biz\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.thomaskeller.biz\/blog\/wp-json\/wp\/v2\/comments?post=423"}],"version-history":[{"count":6,"href":"https:\/\/www.thomaskeller.biz\/blog\/wp-json\/wp\/v2\/posts\/423\/revisions"}],"predecessor-version":[{"id":478,"href":"https:\/\/www.thomaskeller.biz\/blog\/wp-json\/wp\/v2\/posts\/423\/revisions\/478"}],"wp:attachment":[{"href":"https:\/\/www.thomaskeller.biz\/blog\/wp-json\/wp\/v2\/media?parent=423"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.thomaskeller.biz\/blog\/wp-json\/wp\/v2\/categories?post=423"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.thomaskeller.biz\/blog\/wp-json\/wp\/v2\/tags?post=423"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}