私はこのクエリを持っています:
$q = $dbc -> prepare("SELECT * FROM mailbox WHERE msgTo = ? && read = 0");
$q -> execute(array($user['id']));
$mailboxCount = $q -> rowCount();
今、私のテーブルには
msgTo = 1, read = 0
$user['id'] は1に等しい
しかし、行数が 0 を返すのはなぜですか?
からManual
PDOStatement->rowCount — 最後の SQL ステートメントによって影響を受けた行の数を返します
PDOStatement::rowCount() は、対応する PDOStatement オブジェクトによって実行された最後のDELETE、INSERT、または UPDATEステートメントによって影響を受けた行の数を返します。
これを見example
て、はっきりと書かれています
ほとんどのデータベースでは、PDOStatement::rowCount() は SELECT ステートメントの影響を受ける行数を返しません。代わりに、PDO::query() を使用して、意図した SELECT ステートメントと同じ述語を含む SELECT COUNT(*) ステートメントを発行してから、PDOStatement::fetchColumn() を使用して、返される行数を取得します。
IMHO rowCount() は UPDATE および DELETE ステートメントでのみ一致し、SELECT クエリでは一致しません。* を選択すると、データベースからすべてのデータが取得されます。行数だけが必要なので、代わりに count() 関数を使用してください。これははるかに効率的です。
SELECT count(*) FROM mailbox WHERE msgTo = ? && read = 0