From 23751efec166910eb404018f2d0e7b084b290c43 Mon Sep 17 00:00:00 2001 From: Kamil Tekiela Date: Thu, 13 May 2021 13:50:32 +0100 Subject: [PATCH 1/4] fix bug --- ext/pdo_mysql/mysql_driver.c | 6 +++++- ext/pdo_mysql/tests/bug81037.phpt | 32 +++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 ext/pdo_mysql/tests/bug81037.phpt diff --git a/ext/pdo_mysql/mysql_driver.c b/ext/pdo_mysql/mysql_driver.c index c5c04adf8a7a1..eb7a55a7ee720 100644 --- a/ext/pdo_mysql/mysql_driver.c +++ b/ext/pdo_mysql/mysql_driver.c @@ -88,7 +88,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 0000000000000..26e5b0037e4c2 --- /dev/null +++ b/ext/pdo_mysql/tests/bug81037.phpt @@ -0,0 +1,32 @@ +--TEST-- +Bug #81037 PDO discards error message text from prepared statement +--SKIPIF-- + +--FILE-- +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 From 48c68f3ab8a88a508b633f7ba67d87fe8c74ef05 Mon Sep 17 00:00:00 2001 From: Kamil Tekiela Date: Thu, 13 May 2021 14:24:25 +0100 Subject: [PATCH 2/4] fix bug --- ext/pdo_mysql/tests/bug81037.phpt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/pdo_mysql/tests/bug81037.phpt b/ext/pdo_mysql/tests/bug81037.phpt index 26e5b0037e4c2..5471749633dfd 100644 --- a/ext/pdo_mysql/tests/bug81037.phpt +++ b/ext/pdo_mysql/tests/bug81037.phpt @@ -11,7 +11,7 @@ MySQLPDOTest::skip(); prepare($sql); From 69c87b1085c88e67597ec697a30d9f5d4596214b Mon Sep 17 00:00:00 2001 From: Kamil Tekiela Date: Thu, 13 May 2021 14:25:53 +0100 Subject: [PATCH 3/4] fix bug --- ext/pdo_mysql/tests/bug81037.phpt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ext/pdo_mysql/tests/bug81037.phpt b/ext/pdo_mysql/tests/bug81037.phpt index 5471749633dfd..770e27f761491 100644 --- a/ext/pdo_mysql/tests/bug81037.phpt +++ b/ext/pdo_mysql/tests/bug81037.phpt @@ -12,6 +12,8 @@ MySQLPDOTest::skip(); 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, false); $sql = "SELECT `foo` FROM `bar` WHERE `foo` = :par"; $stmt = $pdo->prepare($sql); From ebc6887bf528b5f706d9d19e01f35108152f3a14 Mon Sep 17 00:00:00 2001 From: Kamil Tekiela Date: Thu, 13 May 2021 14:59:54 +0100 Subject: [PATCH 4/4] fix bug --- ext/pdo_mysql/tests/bug81037.phpt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ext/pdo_mysql/tests/bug81037.phpt b/ext/pdo_mysql/tests/bug81037.phpt index 770e27f761491..fc59e1b425a62 100644 --- a/ext/pdo_mysql/tests/bug81037.phpt +++ b/ext/pdo_mysql/tests/bug81037.phpt @@ -14,8 +14,9 @@ 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, false); +MySQLPDOTest::createTestTable($pdo); -$sql = "SELECT `foo` FROM `bar` WHERE `foo` = :par"; +$sql = "SELECT id FROM test WHERE label = :par"; $stmt = $pdo->prepare($sql); try { $stmt->execute();