statements). (Nikita)
. Fixed bug #78152 (PDO::exec() - Bad error handling with multiple commands).
(Nikita)
+ . Fixed bug #70066 (Unexpected "Cannot execute queries while other unbuffered
+ queries"). (Nikita)
- Phpdbg:
. Fixed bug #76813 (Access violation near NULL on source operand). (cmb)
#define mysql_stmt_param_count(s) mysqlnd_stmt_param_count((s))
#define mysql_stmt_num_rows(s) mysqlnd_stmt_num_rows((s))
#define mysql_stmt_insert_id(s) mysqlnd_stmt_insert_id((s))
-#define mysql_stmt_close(s) mysqlnd_stmt_close((s))
+#define mysql_stmt_close(s) mysqlnd_stmt_close((s), 0)
#define mysql_stmt_bind_param(s,b) mysqlnd_stmt_bind_param((s), (b))
#define mysql_stmt_bind_result(s,b) mysqlnd_stmt_bind_result((s), (b))
#define mysql_stmt_errno(s) mysqlnd_stmt_errno((s))
}
if (mysql_stmt_prepare(S->stmt, sql, sql_len)) {
+ if (nsql) {
+ efree(nsql);
+ }
/* TODO: might need to pull statement specific info here? */
/* if the query isn't supported by the protocol, fallback to emulation */
if (mysql_errno(H->server) == 1295) {
- if (nsql) {
- efree(nsql);
- }
+ mysql_stmt_close(S->stmt);
+ S->stmt = NULL;
goto fallback;
}
pdo_mysql_error(dbh);
- if (nsql) {
- efree(nsql);
- }
PDO_DBG_RETURN(0);
}
if (nsql) {
#ifdef PDO_USE_MYSQLND
# define pdo_mysql_stmt_execute_prepared(stmt) pdo_mysql_stmt_execute_prepared_mysqlnd(stmt)
# define pdo_free_bound_result(res) zval_ptr_dtor(res.zv)
-# define pdo_mysql_stmt_close(stmt) mysqlnd_stmt_close(stmt, 0)
#else
# define pdo_mysql_stmt_execute_prepared(stmt) pdo_mysql_stmt_execute_prepared_libmysql(stmt)
# define pdo_free_bound_result(res) efree(res.buffer)
-# define pdo_mysql_stmt_close(stmt) mysql_stmt_close(stmt)
#endif
S->einfo.errmsg = NULL;
}
if (S->stmt) {
- pdo_mysql_stmt_close(S->stmt);
+ mysql_stmt_close(S->stmt);
S->stmt = NULL;
}
PDO_DBG_INF_FMT("stmt=%p", S->stmt);
#if PDO_USE_MYSQLND
- if (!H->emulate_prepare) {
+ if (S->stmt) {
if (!mysqlnd_stmt_more_results(S->stmt)) {
PDO_DBG_RETURN(0);
}
--- /dev/null
+--TEST--
+Bug #70066: Unexpected "Cannot execute queries while other unbuffered queries"
+--SKIPIF--
+<?php
+if (!extension_loaded('pdo') || !extension_loaded('pdo_mysql')) die('skip not loaded');
+require_once(__DIR__ . DIRECTORY_SEPARATOR . 'skipif.inc');
+require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
+MySQLPDOTest::skip();
+?>
+--FILE--
+<?php
+
+require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
+
+$pdo = MySQLPDOTest::factory();
+$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
+$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0);
+
+$db = $pdo->query('SELECT DATABASE()')->fetchColumn(0);
+// USE is not supported in the prepared statement protocol,
+// so this will fall back to emulation.
+$pdo->query('USE ' . $db);
+
+?>
+===DONE===
+--EXPECT--
+===DONE===