|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
Patchespdo_mysql_nextRowset.patch (last revision 2012-07-31 19:10 UTC by keithm at aoeex dot com)Pull RequestsHistoryAllCommentsChangesGit/SVN commits
[2012-08-01 02:03 UTC] aharvey@php.net
-Assigned To:
+Assigned To: mysql
[2012-10-26 09:27 UTC] uw@php.net
[2012-10-26 09:31 UTC] uw@php.net
[2014-01-01 12:36 UTC] felipe@php.net
-Package: PDO related
+Package: PDO MySQL
[2017-10-24 08:07 UTC] kalle@php.net
-Status: Assigned
+Status: Open
-Assigned To: mysql
+Assigned To:
[2020-12-11 09:54 UTC] nikic@php.net
-Status: Open
+Status: Closed
-Assigned To:
+Assigned To: nikic
[2020-12-11 09:54 UTC] nikic@php.net
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Mon Oct 27 20:00:01 2025 UTC |
Description: ------------ Using PDO with the MySQL driver built using libmysql pdo_mysql PDO Driver for MySQL => enabled Client API version => 5.5.25a After calling a stored procedure I have the following lines to eat up the results before running more queries: do { try { $queueStmt->fetch(); } catch (Exception $e){} } while ($queueStmt- >nextRowset()); When using libmysql this results in a segfault when calling nextRowset. Test script: --------------- <?php $db = new PDO('mysql:host=localhost;dbname=bugtest', 'bugtest', 'bugtest', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $sql = 'DROP TABLE IF EXISTS testtbl'; $db->exec($sql); $sql = 'DROP PROCEDURE IF EXISTS testproc'; $db->exec($sql); $sql = 'CREATE TABLE testtbl (pk INT NOT NULL AUTO_INCREMENT PRIMARY KEY, data VARCHAR(10), nextrun DATETIME)'; $db->exec($sql); $sql = "INSERT INTO testtbl (data, nextrun) VALUES ('asdf', UTC_TIMESTAMP()),('defg', UTC_TIMESTAMP()),('higk', UTC_TIMESTAMP()),('lmnop', UTC_TIMESTAMP())"; $db->exec($sql); $sql = 'CREATE PROCEDURE testproc() NOT DETERMINISTIC MODIFIES SQL DATA BEGIN DECLARE nextId INT; SELECT pk INTO nextId FROM testtbl WHERE nextrun=(SELECT MIN(nextrun) FROM testtbl) LIMIT 1; UPDATE testtbl SET nextrun=UTC_TIMESTAMP()+INTERVAL 1 DAY WHERE pk=nextId; SELECT * FROM testtbl WHERE pk=nextId; END'; $db->exec($sql); $queueSql = 'CALL testproc()'; $queueStmt = $db->prepare($queueSql); $queueStmt->execute(); $row=$queueStmt->fetch(PDO::FETCH_ASSOC); do { try { $queueStmt->fetch(); } catch (Exception $e){} } while ($queueStmt->nextRowset()); echo "Success"; Expected result: ---------------- Success Actual result: -------------- Segmentation fault