Statement::rowCount not reliable for SELECT queries
... taken from the PHPdoc comment:
Returns the number of rows affected by the last DELETE, INSERT, or UPDATE statement
executed by the corresponding object.
If the last SQL statement executed by the associated Statement object was a SELECT statement,
some databases may return the number of rows returned by that statement. However,
this behaviour is not guaranteed for all databases and should not be
relied on for portable applications.
In particular rowCount() on valid SELECT statements for SQLite as DBMS returns 0 when fetch() would retrieve existing records. Thus, using rowCount() should be avoided and replaced by proper COUNT statements instead - if required at all.