mirror of
https://github.com/php/php-src.git
synced 2026-04-29 03:03:26 +02:00
@@ -80,7 +80,7 @@
|
||||
#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))
|
||||
|
||||
@@ -201,18 +201,17 @@ static int mysql_handle_preparer(pdo_dbh_t *dbh, const char *sql, size_t sql_len
|
||||
}
|
||||
|
||||
if (mysql_stmt_prepare(S->stmt, sql, sql_len)) {
|
||||
/* 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);
|
||||
}
|
||||
goto fallback;
|
||||
}
|
||||
pdo_mysql_error(dbh);
|
||||
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) {
|
||||
mysql_stmt_close(S->stmt);
|
||||
S->stmt = NULL;
|
||||
goto fallback;
|
||||
}
|
||||
pdo_mysql_error(dbh);
|
||||
PDO_DBG_RETURN(0);
|
||||
}
|
||||
if (nsql) {
|
||||
|
||||
@@ -31,11 +31,9 @@
|
||||
#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
|
||||
|
||||
|
||||
@@ -56,7 +54,7 @@ static int pdo_mysql_stmt_dtor(pdo_stmt_t *stmt) /* {{{ */
|
||||
S->einfo.errmsg = NULL;
|
||||
}
|
||||
if (S->stmt) {
|
||||
pdo_mysql_stmt_close(S->stmt);
|
||||
mysql_stmt_close(S->stmt);
|
||||
S->stmt = NULL;
|
||||
}
|
||||
|
||||
@@ -363,7 +361,7 @@ static int pdo_mysql_stmt_next_rowset(pdo_stmt_t *stmt) /* {{{ */
|
||||
}
|
||||
|
||||
#ifdef PDO_USE_MYSQLND
|
||||
if (!H->emulate_prepare) {
|
||||
if (S->stmt) {
|
||||
if (mysqlnd_stmt_next_result(S->stmt)) {
|
||||
pdo_mysql_error_stmt(stmt);
|
||||
S->done = 1;
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
--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===
|
||||
Reference in New Issue
Block a user