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