0

私はこのクエリを持っています:

$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 を返すのはなぜですか?

4

2 に答える 2

3

からManual

PDOStatement->rowCount — 最後の SQL ステートメントによって影響を受けた行の数を返します

PDOStatement::rowCount() は、対応する PDOStatement オブジェクトによって実行された最後のDELETE、INSERT、または UPDATEステートメントによって影響を受けた行の数を返します。

これを見exampleて、はっきりと書かれています

ほとんどのデータベースでは、PDOStatement::rowCount() は SELECT ステートメントの影響を受ける行数を返しません。代わりに、PDO::query() を使用して、意図した SELECT ステートメントと同じ述語を含む SELECT COUNT(*) ステートメントを発行してから、PDOStatement::fetchColumn() を使用して、返される行数を取得します。

于 2011-10-22T10:32:24.987 に答える
2

IMHO rowCount() は UPDATE および DELETE ステートメントでのみ一致し、SELECT クエリでは一致しません。* を選択すると、データベースからすべてのデータが取得されます。行数だけが必要なので、代わりに count() 関数を使用してください。これははるかに効率的です。

SELECT count(*) FROM mailbox WHERE msgTo = ? && read = 0
于 2011-10-22T10:32:08.877 に答える