ID: 37026 Updated by: [EMAIL PROTECTED] Reported By: kubis at pawouk dot net -Status: Open +Status: Bogus Bug Type: PDO related Operating System: Windows XP PHP Version: 5.1.2 New Comment:
There is something wrong with the classes you use for testing. Short script that does not use any external sources: <?php $dbh = new PDO("pgsql:<conn_attrs_removed>); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $dbh->prepare('SELECT 1 AS testcolumn1, 2 AS testcolumn2'); $count1 = $stmt->columnCount(); $res = $stmt->execute(); $count2 = $stmt->columnCount(); var_dump($res); echo "<br>$count1<br>\n$count2"; ?> produces: bool(true) 0 2 as it should. Previous Comments: ------------------------------------------------------------------------ [2006-04-09 19:57:18] kubis at pawouk dot net there is a typo: sentence "but with version 5.2.1 it returns false" should be "but with version 5.1.2 it returns false" ------------------------------------------------------------------------ [2006-04-09 19:46:53] kubis at pawouk dot net Description: ------------ PDOStatement::execute() returns false even if the statement has been executed correctly. I have tried it with PDO drivers for postgresql packaged with PHP version 5.1, it returns correctly true, but with version 5.2.1 it returns false. I ran into this problem while executing unit tests after an upgrade. According to manual page should PDOStatement::execute() return true if the statement has been executed properly or false if not Reproduce code: --------------- try { $db = DBShop::getInstance(); // $stmt = $db->prepare('SELECT 1 AS testcolumn1, 2 AS testcolumn2'); $count1 = $stmt->columnCount(); $res = $stmt->execute(); $count2 = $stmt->columnCount(); } catch (Exception $e){ $fail[] = self::errorMsg($e, 'Unable to test columnCount()'); break; } $this->assertTrue($res, 'DBStatement::execute() returned false, should be true'); $this->assertSame(2, $count2, 'DBStatement::columnCount() did not return expected value'); Expected result: ---------------- no failure in unit test: - $res is true - $count2 is 2 Actual result: -------------- PHPUnit reports "DBStatement::execute() returned false, should be true", so $res is not true; but $count2 is integer of value 2, thus the statement has been executed properly ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=37026&edit=1