| 
        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: Tue Nov 04 13:00:02 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