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