|  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #69504 PDO::exec() returns wrong value on MySQL
Submitted: 2015-04-22 14:48 UTC Modified: 2020-12-11 14:59 UTC
From: joao dot pinheiro at weduc dot com Assigned:
Status: Not a bug Package: PDO MySQL
PHP Version: Irrelevant OS: Linux/FreeBSD
Private report: No CVE-ID: None
 [2015-04-22 14:48 UTC] joao dot pinheiro at weduc dot com
Calling MySQL's PDO::exec() with an update query that doesn't change existing data on an existing row always returns 0. With PostgreSQL, always returns 1. If, in MySQL, a trigger is added to the updating table, the trigger is executed (and inserts may occur) but the result is still 0.
I am aware of the differences between Postgresql and Mysql regarding updates due to MVCC, but if a trigger changes something, it should return the number of affected rows.

Test script:
/* Assuming the following sql structure:

create table test(
 id int(11) not null,
 name varchar(128) not null
insert into test values(1, 'test_name');
$query = "update test set name='xpto' where id=1";
echo $pdo->exec($query); // first run returns 1, all others 0

/* Add the following trigger:
create table control(
 counter int(11) not null
insert into control values(0);

CREATE TRIGGER test_update     
 UPDATE control set counter=counter+1;
$query = "update test set name='xpto' where id=1";
echo $pdo->exec($query); // first run returns 1, all others 0, but control table is updated


Add a Patch

Pull Requests

Add a Pull Request


AllCommentsChangesGit/SVN commitsRelated reports
 [2020-12-11 14:59 UTC]
-Status: Open +Status: Not a bug
 [2020-12-11 14:59 UTC]
Behavior is the same on MySQL CLI, as such this has no relation to PDO (or PHP at all). If you think this behavior is not correct, then you need to report it with the MySQL project.
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sat Apr 20 07:01:29 2024 UTC