php.net |  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
View Add Comment Developer Edit
Anyone can comment on a bug. Have a simpler test case? Does it work for you on a different platform? Let us know!
Just going to say 'Me too!'? Don't clutter the database with that please !
Your email address:
MUST BE VALID
Solve the problem:
28 - 22 = ?
Subscribe to this entry?

 
 [2015-04-22 14:48 UTC] joao dot pinheiro at weduc dot com
Description:
------------
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     
 BEFORE UPDATE ON test    
 FOR EACH ROW BEGIN 
 UPDATE control set counter=counter+1;
 END$$
*/
$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


Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2020-12-11 14:59 UTC] nikic@php.net
-Status: Open +Status: Not a bug
 [2020-12-11 14:59 UTC] nikic@php.net
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: Thu Apr 25 00:01:41 2024 UTC