Edit report at https://bugs.php.net/bug.php?id=66621&edit=1
ID: 66621
Comment by: enrico_kaelert at kabelmail dot de
Reported by: enrico_kaelert at kabelmail dot de
Summary: PDO::commit() bug
Status: Feedback
Type: Bug
Package: PDO MySQL
Operating System: Windows 7 64bit
PHP Version: Irrelevant
Assigned To: ab
Block user comment: N
Private report: N
New Comment:
Debian
MySQL Server Version: 5.5.31-1~dotdeb.0
PHP Version: 5.4.25-1~dotdeb.0
Same result as on windows:
1st $type : no inserts
2nd $type : inserts made
So i cant confirm that this happen only on windows
Previous Comments:
------------------------------------------------------------------------
[2014-04-30 11:47:58] ab@php.net
Johannes, thanks for looking in. As far as I could debug by now, the behaviour is reproduceable.
But, only if mysqld runs on windows. When I point the snippet from April 24th to a DB running under
Linux, the error disappears. Strange enough, but seems to have to do with mysqld+platform itself or
its configs.
Additionally, as far I could debug, the error is caused by something in mysqlnd, namely
mysqlnd.c:320 in simple_command method. There, when asked for the connection status, it appears to
be CONN_NEXT_RESULT_PENDING, so produces an error and no COMMIT. In the backtrace, simple_method is
called from the pdo commit method doing COMMIT query internally. That's all I have at the
moment, so digging deeper into it. Interestingly, when adding CONN_NEXT_RESULT_PENDING to CONN_READY
case, it seems to pass. But I'm entirely not sure it should be so.
Enrico, could you please test whether it works if you use mysqld not on windows? Thanks.
------------------------------------------------------------------------
[2014-04-29 15:07:30] enrico_kaelert at kabelmail dot de
edit:
try this:
change the query in the test script to:
# 3. multi insert via beginTransaction() and commit() / rollBack()
(...)
$sql = "
-- this is my pretty commented query ...
-- above comments works
INSERT INTO
testdb.tbl
SET
name = 'a' -- middle comment works
-- name = 'a' middle new line comments works
; -- but this comment finally f* it up
-- so simple nothing is allowed after the ;
-- except if we destroy the stmt
";
------------------------------------------------------------------------
[2014-04-29 14:51:50] enrico_kaelert at kabelmail dot de
@johannes
Which $type you used?
And did you looked into the db to make sure the entries really exists?
@all
btw: something new:
I found out that:
- if you use only 1 INSERT INTO in the query
- and if you add comments to the query
then the same effect happen: no INSERT made.
So change the query in the test script to:
# 3. multi insert via beginTransaction() and commit() / rollBack()
(...)
$sql = "
INSERT INTO testdb.tbl SET name = 'a'; -- this
is my comment
-- this is a new line comment
";
(...)
Delete the test table if exists and use the $type "regular".
This is only 1 INSERT INTO and should work.
But it doesnt because of the comments(?).
BUT it will work if we destroy the $stmt (by using the $type "alternative").
------------------------------------------------------------------------
[2014-04-29 09:38:32] johannes@php.net
With the ode from 2014-04-24 12:25 UTC I get this result:
Array
(
[0] => Array
(
[id] => 1
[name] => a
)
[1] => Array
(
[id] => 2
[name] => b
)
[2] => Array
(
[id] => 3
[name] => c
)
)
This seems right to me. I tried a handful combinations of MySQL servers & PHP versions. Not on
windows, though (while I can't imagine something Windows specific to be the case)
------------------------------------------------------------------------
[2014-04-24 14:05:31] ab@php.net
Enrico,
don't get me wrong, but brevity is wit. The script is still too excessive, but the explanation
in your latest pastebin is much better, even for such a dull person like me. Lets see.
Thanks
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=66621
--
Edit this bug report at https://bugs.php.net/bug.php?id=66621&edit=1