|   | php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login | 
| 
  [2013-10-22 13:46 UTC] news at franky dot net
 Description:
------------
In PHP 5.3 the test script works fine and gives me the results as you see in "expected result".
If i use PHP 5.4 or PHP 5.5, the inner pdo->prepare()->execute clears the outer PDO-Resultset unexpectedly.
Test script:
---------------
$pdo = new PDO("dblib:host=192.168.1.100;dbname=kunden;charset=UTF-8;", "kunden", "geheim");
$stmt = $pdo->prepare("select top 10 * from Kunden");
$stmt->execute();
while($row = $stmt->fetch()) {
    echo 'KundenID: ' . $row["KundenID"] . '<br />';
    
    $stmt2 = $pdo->prepare("select top 10 * from Ansprechpartner where KundenID=?");
    $stmt2->execute(array($row["KundenID"]));
    
    while($row2 = $stmt2->fetch()) {
        echo 'AnsprechpartnerID: ' . $row2["AnsprechpartnerID"] . '<br />';
    }
    
}
unset($pdo);
Expected result:
----------------
KundenID: 10
AnsprechpartnerID: 1624
AnsprechpartnerID: 1716
AnsprechpartnerID: 7823
AnsprechpartnerID: 9309
AnsprechpartnerID: 10398
AnsprechpartnerID: 18686
KundenID: 13
AnsprechpartnerID: 1621
KundenID: 15
AnsprechpartnerID: 1596
AnsprechpartnerID: 4769
AnsprechpartnerID: 92891
Actual result:
--------------
KundenID: 10
AnsprechpartnerID: 1624
AnsprechpartnerID: 1716
AnsprechpartnerID: 7823
AnsprechpartnerID: 9309
AnsprechpartnerID: 10398
AnsprechpartnerID: 18686
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits             | |||||||||||||||||||||||||||||||||||||
|  Copyright © 2001-2025 The PHP Group All rights reserved. | Last updated: Fri Oct 31 00:00:01 2025 UTC | 
This also happens with "normal" queries executed via $pdo->query('..'), not only with prepared statements.Same thing happening on Ubuntu 14.04, PHP 5.5.9-1ubuntu4.2 Here's a test script that doesn't require a table, if that helps: Test script: --------------- $dsn = 'dblib:dbname=DB_NAME;host=DB_HOST'; $db = new \PDO($dsn, 'USER', 'PASSWORD'); $statement = $db->prepare('SELECT 1 UNION SELECT 2 UNION SELECT 3'); $statement->execute(); while($row = $statement->fetch()) { $statement2 = $db->prepare('SELECT 1'); $statement2->execute(); $statement2->fetch(); // Loop will exit }