|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2006-04-09 19:46 UTC] 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
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sat Nov 01 04:00:02 2025 UTC |
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.