php - PDO dblib over freetds resets fetch of query on sql server 2000 if another query is issued inside a fetch loop -
ok, we've got new server
debian wheezy 32bit php 5.5.18 freetds 0.91this php app needs talk old sql server 2000 server. used old code our previous server (php 5.2 , older freetds - can't version). connect sql server 2000 through pdo using dblib driver.
we're experiencing weird behaviour fetch function. if issue query during fetch loop on same pdo connection object, main query gets reset , next fetch phone call homecoming false if there still records fetched.
// pseudo code // here main query $q = $sql7->query("select top 5 * news order info desc"); while ($row = $q->fetch(pdo::fetch_assoc)) { // looping through results echo "<h1>main query</h1>"; print_r($row); // issue query on same pdo connection $subq = $sql7->query("select top 1 * news idnews = " . $row['idnews'] . " "); while ($subresult = $subq->fetch(pdo::fetch_assoc)) { echo "<h1>inner query</h1>"; print_r($subresult); } // here main query $q->fetch(pdo::fetch_assoc) reply false on next iteration // if remove subq, main query loops fine echo "<hr>"; } same code on windows php pdo_sqlserver driver works fine.
it doesn't matter type of fetch pass argument of fetch function.
php doesn't throw warning or error.
i don't know what's going on here.
as of: reference (php bug site)
this behavior of mssql (tds), dblib , freetds. 1 statement per connection rule. if initiate statement, previous statement cancelled.
the previous versions buffered entire result set in memory leading oom errors on big results sets.
so, seems previous versions of php (5.3 , previous) not conforming tds behaviour. need refactor code then.
php sql-server pdo freetds
No comments:
Post a Comment