|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2020-10-28 15:20 UTC] nikic@php.net
-Status: Open
+Status: Closed
-Assigned To:
+Assigned To: nikic
[2020-10-28 15:20 UTC] nikic@php.net
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sun Oct 26 23:00:02 2025 UTC |
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.