#46429 [Bgs]: columnCount() on sqlite3 returns invalid column count

From: Date: Fri, 31 Oct 2008 11:04:31 +0000
Subject: #46429 [Bgs]: columnCount() on sqlite3 returns invalid column count
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-130346@lists.php.net to get a copy of this message
ID: 46429 Updated by: felipe@php.net Reported By: balustefan at gmail dot com Status: Bogus Bug Type: PDO related Operating System: FreeBSD 7.0-RELEASE i386 PHP Version: 5.2.6 New Comment: But the query was executed. This is the requirement to you can get the number of fields. Previous Comments: ------------------------------------------------------------------------ [2008-10-31 10:49:41] balustefan at gmail dot com Well, are you can see from the fetchHost() function, I call prepare() then call execute(). This is the actual function that I use: function fetchHost($hwAddr) { global $appErr, $sqlPDO; $sqlQuery = "SELECT * FROM hosts WHERE hw = ?"; var_dump($hwAddr); if (($sqlStatement = $sqlPDO->prepare($sqlQuery)) === false) { $appErr = $sqlPDO->errorInfo(); return (bool) false; } var_dump($sqlStatement); if ($sqlStatement->execute(array($hwAddr)) === false) { $appErr = $sqlStatement->errorInfo(); return (bool) false; } var_dump($sqlStatement); var_dump($sqlStatement->columnCount()); if ($sqlStatement->columnCount() < 1) return (bool) true; return $sqlStatement->fetch(PDO::FETCH_ASSOC); } The results of the var_dump()'s are: string(17) "00:e0:4c:20:dc:20" object(PDOStatement)#3 (1) { ["queryString"]=> string(32) "SELECT * FROM hosts WHERE hw = ?" } object(PDOStatement)#3 (1) { ["queryString"]=> string(32) "SELECT * FROM hosts WHERE hw = ?" } int(3) I certainly don't have 3 entries returned since there are ONLY two inserted into the database :) and 00:e0:4c:20:dc:20 really doesn't match any the them. ------------------------------------------------------------------------ [2008-10-31 01:24:10] felipe@php.net Thank you for taking the time to write to us, but this is not a bug. Please double-check the documentation available at http://www.php.net/manual/ and the instructions on how to report a bug at http://bugs.php.net/how-to-report.php See: http://docs.php.net/manual/en/pdostatement.columncount.php No result set == no query executed. (like prepare() not followed by execute()) ------------------------------------------------------------------------ [2008-10-30 12:24:37] balustefan at gmail dot com Description: ------------ Seems like columnCount() returns invelid int value. No mater how many results match a query, columnCount() will return int(3). Even for no results. The underlying database is sqlite3-3.5.6 Reproduce code: --------------- 1. create an sql table in a freshly database file: sqlite> create table hosts(hw char(18), > ip varchar(16), > extra text, > constraint hw_pkey primary key(hw)); 2. insert some data into it: sqlite> insert into hosts values('00:19:21:57:44:f8','89.122.239.55','comment'); sqlite> insert into hosts values('00:e0:4c:20:dc:15','194.102.255.234','some comment'); 3. use a php function like this one to fetch a "host": function fetchHost($hwAddr) { $sqlQuery = "SELECT * FROM hosts WHERE hw = ?"; if (($sqlStatement = $sqlPDO->prepare($sqlQuery)) === false) return (bool) false; if ($sqlStatement->execute(array($hwAddr)) === false) return (bool) false; var_dump($sqlStatement->columnCount()); if ($sqlStatement->columnCount() < 1) return (bool) true; return $sqlStatement->fetch(PDO::FETCH_ASSOC); } Expected result: ---------------- The output of var_dump() should be 0 if no rows are found, and number of rows if all is ok. Actual result: -------------- On 0 or more rows returned, columnCount() returns int(3). ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=46429&edit=1

« previous php.bugs (#130346) next »