php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #70066 Unexpected "Cannot execute queries while other unbuffered queries"
Submitted: 2015-07-13 18:32 UTC Modified: 2020-12-09 16:06 UTC
Votes:5
Avg. Score:3.8 ± 0.7
Reproduced:4 of 4 (100.0%)
Same Version:0 (0.0%)
Same OS:0 (0.0%)
From: david at grudl dot com Assigned:
Status: Closed Package: PDO MySQL
PHP Version: 5.6.11 OS:
Private report: No CVE-ID: None
 [2015-07-13 18:32 UTC] david at grudl dot com
Description:
------------
This code throws "SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active" on line 4.

The solution is to use exec() instead of query(), but I think that it is bug since there is no other active query.

Test script:
---------------
$pdo = new PDO('mysql:host=127.0.0.1', '...', '...');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0);
$pdo->query('USE nette_test');



Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2018-06-06 17:30 UTC] kbenton at activecampaign dot com
kbenton@localhost  ~  php --version    
PHP 7.2.6 (cli) (built: May 22 2018 16:22:08) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
 kbenton@localhost  ~  php testme.php 
Exception caught: 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.
Here!
 kbenton@localhost  ~  cat testme.php
<?php

try {
    $pdo = new PDO('mysql:host=127.0.0.1', 'aql_app', '@ql_@pp');
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0);
    $pdo->query('USE aql_db');
} catch ( Exception $e ) {
    echo "Exception caught: {$e->getMessage()}\n";
}
echo "Here!\n";
 kbenton@localhost  ~ 
 [2020-12-09 16:06 UTC] nikic@php.net
-Status: Open +Status: Verified
 [2020-12-09 16:06 UTC] nikic@php.net
The relevant part here is that "USE" is not supported by prepared statements. MySQL returns error 1295 and PDO checks for that and falls back to emulated prepared statements. But presumably that doesn't work correctly.
 [2020-12-09 16:25 UTC] nikic@php.net
Automatic comment on behalf of nikita.ppv@gmail.com
Revision: http://git.php.net/?p=php-src.git;a=commit;h=106e7e4bca7c0fd975eb219b18e3c34957ba8657
Log: Fixed bug #70066
 [2020-12-09 16:25 UTC] nikic@php.net
-Status: Verified +Status: Closed
 
PHP Copyright © 2001-2021 The PHP Group
All rights reserved.
Last updated: Thu Feb 25 19:01:24 2021 UTC