Bug #72076 [Opn->Csd]: PDO ignores MySQL errors when using server-side prepared statements
| From: | nikic@php.net | Date: | Wed, 28 Oct 2020 15:20:31 +0000 |
| Subject: | Bug #72076 [Opn->Csd]: PDO ignores MySQL errors when using server-side prepared statements | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-229987@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=72076&edit=1
ID: 72076
Updated by: nikic@php.net
Reported by: andre at webkr dot de
Summary: PDO ignores MySQL errors when using server-side
prepared statements
-Status: Open
+Status: Closed
Type: Bug
Package: PDO MySQL
Operating System: Windows + Mac
PHP Version: 7.0.5
-Assigned To:
+Assigned To: nikic
Block user comment: N
Private report: N
New Comment:
This is another issue fixed by https://github.com/php/php-src/commit/b03776adb5bbb9b54731a44377632fcc94a59d2f.
An error is properly reported on current PHP-7.4 HEAD.
Previous Comments:
------------------------------------------------------------------------
[2016-04-22 11:32:11] andre at webkr dot de
Description:
------------
When using server-side prepared statements, MySQL errors happening during execution are not returned
by PDO MySQL.
This happens in PHP 5.6 and PHP 7.0.
Test script:
---------------
$p = new PDO('mysql:host=localhost;charset=utf8', 'root', '',
array(PDO::MYSQL_ATTR_COMPRESS => false));
$p->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); // server
$p->query('CREATE DATABASE IF NOT EXISTS fixture');
$p->query('DROP TABLE IF EXISTS fixture.MysqlDatabaseTest');
$p->query('CREATE TABLE fixture.MysqlDatabaseTest (MysqlDatabaseTest_id INT NOT NULL
AUTO_INCREMENT PRIMARY KEY, i INT NOT NULL) ENGINE=MyISAM');
$p->query('INSERT INTO fixture.MysqlDatabaseTest SET i = 1');
$p->query('INSERT INTO fixture.MysqlDatabaseTest SET i = 42');
$s = $p->prepare('SELECT i FROM fixture.MysqlDatabaseTest WHERE i = (SELECT i FROM
fixture.MysqlDatabaseTest)');
$success = $s ? $s->execute() : null;;
var_dump($success, $s, $p->errorInfo());
if ($s)
var_dump($s->errorInfo(), $s->fetchAll());
Expected result:
----------------
Error: Subquery returns more than 1 row
Actual result:
--------------
No error,
$s->fetchAll() returns an empty result array.
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=72076&edit=1