1--TEST-- 2PDO MySQL Bug #41997 (stored procedure call returning single rowset blocks future queries) 3--SKIPIF-- 4<?php 5require_once(__DIR__ . DIRECTORY_SEPARATOR . 'skipif.inc'); 6require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); 7MySQLPDOTest::skip(); 8 9$db = MySQLPDOTest::factory(); 10$row = $db->query('SELECT VERSION() as _version')->fetch(PDO::FETCH_ASSOC); 11$matches = array(); 12if (!preg_match('/^(\d+)\.(\d+)\.(\d+)/ismU', $row['_version'], $matches)) 13 die(sprintf("skip Cannot determine MySQL Server version\n")); 14 15$version = $matches[1] * 10000 + $matches[2] * 100 + $matches[3]; 16if ($version < 50000) 17 die(sprintf("skip Need MySQL Server 5.0.0+, found %d.%02d.%02d (%d)\n", 18 $matches[1], $matches[2], $matches[3], $version)); 19?> 20--FILE-- 21<?php 22require __DIR__ . '/mysql_pdo_test.inc'; 23$db = MySQLPDOTest::factory(); 24 25$db->exec('DROP PROCEDURE IF EXISTS p'); 26$db->exec('CREATE PROCEDURE p() BEGIN SELECT 1 AS "one"; END'); 27 28$stmt = $db->query("CALL p()"); 29do { 30 var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); 31} while ($stmt->nextRowset()); 32var_dump($stmt->errorInfo()); 33 34$stmt = $db->query('SELECT 2 AS "two"'); 35var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); 36var_dump($stmt->errorInfo()); 37print "done!"; 38?> 39--EXPECT-- 40array(1) { 41 [0]=> 42 array(1) { 43 ["one"]=> 44 string(1) "1" 45 } 46} 47array(0) { 48} 49array(3) { 50 [0]=> 51 string(5) "00000" 52 [1]=> 53 NULL 54 [2]=> 55 NULL 56} 57array(1) { 58 [0]=> 59 array(1) { 60 ["two"]=> 61 string(1) "2" 62 } 63} 64array(3) { 65 [0]=> 66 string(5) "00000" 67 [1]=> 68 NULL 69 [2]=> 70 NULL 71} 72done! 73