ID: 46429 User updated by: balustefan at gmail dot com 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:
I am sorry, i've confused rowCount() with columnCount(). The bug is bogus. However, I am not sure what to use in order to see how many rows have been returned by the select command. rowCount() is to be used for INSERT, UPDATE and DELETE only. Is there any way to get the rows returned by SELECT other than count(fetchAll()) ? Previous Comments: ------------------------------------------------------------------------ [2008-10-31 11:04:31] [EMAIL PROTECTED] But the query was executed. This is the requirement to you can get the number of fields. ------------------------------------------------------------------------ [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] [EMAIL PROTECTED] 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