diff --git a/NEWS b/NEWS index d94b43464ff..c8e8a136fb6 100644 --- a/NEWS +++ b/NEWS @@ -92,7 +92,8 @@ PHP NEWS fetching a BLOB). (Nikita) . PDO MySQL: - . Fixed bug#80908 (PDO::lastInsertId() return wrong). (matt) + . Fixed bug #80908 (PDO::lastInsertId() return wrong). (matt) + . Fixed bug #81037 PDO discards error message text from prepared statement. (Kamil Tekiela) . PDO ODBC: . Implement PDO_ATTR_SERVER_VERSION and PDO_ATTR_SERVER_INFO for diff --git a/ext/pdo_mysql/mysql_driver.c b/ext/pdo_mysql/mysql_driver.c index c5dcc264adb..c12e4813969 100644 --- a/ext/pdo_mysql/mysql_driver.c +++ b/ext/pdo_mysql/mysql_driver.c @@ -94,7 +94,11 @@ int _pdo_mysql_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt, const char *file, int lin dbh->is_persistent); } else { - einfo->errmsg = pestrdup(mysql_error(H->server), dbh->is_persistent); + if (S && S->stmt) { + einfo->errmsg = pestrdup(mysql_stmt_error(S->stmt), dbh->is_persistent); + } else { + einfo->errmsg = pestrdup(mysql_error(H->server), dbh->is_persistent); + } } } else { /* no error */ strcpy(*pdo_err, PDO_ERR_NONE); diff --git a/ext/pdo_mysql/tests/bug81037.phpt b/ext/pdo_mysql/tests/bug81037.phpt new file mode 100644 index 00000000000..67c90a4458b --- /dev/null +++ b/ext/pdo_mysql/tests/bug81037.phpt @@ -0,0 +1,35 @@ +--TEST-- +Bug #81037 PDO discards error message text from prepared statement +--SKIPIF-- + +--FILE-- +setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); +$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); +MySQLPDOTest::createTestTable($pdo); + +$sql = "SELECT id FROM test WHERE label = :par"; +$stmt = $pdo->prepare($sql); +try { + $stmt->execute(); +} catch (PDOException $e) { + echo $e->getMessage(), "\n"; +} +$data = $stmt->fetchAll(PDO::FETCH_ASSOC); + +?> +--CLEAN-- + +--EXPECT-- +SQLSTATE[HY000]: General error: 2031 No data supplied for parameters in prepared statement \ No newline at end of file