|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2006-02-18 21:55 UTC] brice dot joly at free dot fr
Description:
------------
When calling a procedure from PDO with PDO::ATTR_PERSISTENT = true, I have a very strange behaviour when refreshing the page: on odd tries it works as expected, on even ones PDO makes the call, then loses connection while retrieving the result. Direct and prepared call both produce the same behaviour. Note that the call is actually ran by MySQL in both cases (appears in the query log).
When switching PDO::ATTR_PERSISTENT to false all works as expected.
Running the test with PHP CLI works fine. I run PHP (tested with snapshot of 17 Feb 2006, 5.1.3-dev, had the same problem with 5.1.2) as a module, Apache 2.0.52, MySQL 5.0.18.
Reproduce code:
---------------
// MySQL Procedure
CREATE PROCEDURE test.simpleTest()
BEGIN
SELECT 'Procedure output';
END;
// PDO call
<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', 'user', 'password', array(PDO::ATTR_PERSISTENT => true);
foreach ($dbh->query("CALL simpleTest()") as $row) {
print_r($row);
}
$arr = $dbh->errorInfo();
print_r($arr);
/* Same problem with
$stmt = $dbh->prepare("CALL simpleTest()");
$stmt->execute();
foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) {
print_r($row);
}
$arr = $stmt->errorInfo();
print_r($arr);
*/
?>
Expected result:
----------------
Array
(
[Procedure output] => Procedure output
[0] => Procedure output
)
Array
(
[0] => 00000
)
on odd and even tries/refresh
Actual result:
--------------
On odd tries (1st, 3rd, etc.):
Array
(
[Procedure output] => Procedure output
[0] => Procedure output
)
Array
(
[0] => 00000
)
on even tries (refresh)
Array
(
[0] => HY000
[1] => 2013
[2] => Lost connection to MySQL server during query
)
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Tue Nov 04 18:00:01 2025 UTC |
Some quick clarification: the problem occurs even with non-prepared code: $dbh = new PDO('mysql:host=localhost;dbname=test', 'user', 'password', array(PDO::ATTR_PERSISTENT => true); foreach ($dbh->query("CALL simpleTest()") as $row) { print_r($row); } $arr = $dbh->errorInfo(); print_r($arr); So I'm afraid the problem is not directly linked with the native prepared statement API, though the people at that conference might know better.