H. Wade Minter wrote:

In DBD::SQLite, what's the proper way to get the number of rows
returned by a query?  for example:

$query = "SELECT * FROM foo WHERE bar LIKE '%baz%'";
$sth = $dbh->prepare($query);
$sth->execute;

$numrows = $sth->rows; # DOES NOT WORK, ALWAYS RETURNS -1

From the DBI manpage:

       "rows"
             $rv = $sth->rows;

           Returns the number of rows affected by the last row affecting com-
           mand, or -1 if the number of rows is not known or not available.

           Generally, you can only rely on a row count after a non-"SELECT"
           "execute" (for some specific operations like "UPDATE" and
           "DELETE"), or after fetching all the rows of a "SELECT" statement.

           For "SELECT" statements, it is generally not possible to know how
           many rows will be returned except by fetching them all.  Some
           drivers will return the number of rows the application has fetched
           so far, but others may return -1 until all rows have been fetched.
           So use of the "rows" method or $DBI::rows with "SELECT" statements
           is not recommended.

           One alternative method to get a row count for a "SELECT" is to exe-
           cute a "SELECT COUNT(*) FROM ..." SQL statement with the same "..."
           as your query and then fetch the row count from that.

While SQLite might be able to give immediate feedback on the number of rows returned by a fetch, in general you can't really tell that immediately after the operation itself. This is especially true for highly-parallel systems like Oracle, etc.

Randy
--
[EMAIL PROTECTED]          http://www.rjray.org         http://www.svsm.org

Always code as if the guy who ends up maintaining your code will be a violent
psychopath who knows where you live.  -- Rick Osborne

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to