簡単なpdoで準備されたクエリがあります。
$result = $db->prepare("select id, course from coursescompleted where person=:p");
$result ->bindParam(':p', $q, PDO::PARAM_INT);
$result->execute();
$rows = $result->fetch(PDO::FETCH_NUM);
echo $rows[0];
エコーは、クエリによって返されたレコードの数ではなく、レコードのID値を返しているようですか?
このためのアイデアや説明はありますか?
PDO :: FETCH_NUM: は、結果セットで返された列番号でインデックス付けされた配列を列0から返します
行数をまったくフェッチしていません。
_SELECT COUNT(*) FROM coursescompleted where person=:p
_
このクエリは、_$rows[0];
_に合計行を返します
編集:@rayの回答をご覧ください。 InnoDBの場合、count(id)
の使用はcount(*)
よりも優れています。
以前のクエリから、次の方法で行数を取得できます。
_$row_count = $result->rowCount();
_
しかし警告されます:
関連するPDOStatementによって実行された最後のSQLステートメントがSELECTステートメントであった場合、一部のデータベースはそのステートメントによって返された行数を返す場合があります。ただし、この動作はすべてのデータベースで保証されているわけではないため、移植可能なアプリケーションに依存するべきではありません。
データベースから行を返すクエリを実行し、結果から最初の行を変数にフェッチして、その行の最初の列をエコーしました。
カウントしたい場合は、SQL count()を実行します
$result = $db->prepare("select count(*) from coursescompleted where person=:p");
$result->bindParam(':p', $q, PDO::PARAM_INT);
$result->execute();
$rowCount = $result->fetchColumn(0);
echo $rowCount;
id
が主キーの使用であると仮定します。
SELECT COUNT(id) FROM coursescompleted WHERE person=:p;
Count(*)は避けてください。ストレージエンジンがInnoDB(おそらくMyIsam以外のもの)である場合は、パフォーマンスが低下します。
_$rows
_は配列なので、echo count($rows);
を試してください。
編集:
結果を使用するには
_$rows = $result->fetchAll(/* nothing here */);
if(count($rows) > 0) {
// Show results, perhaps using a foreach($rows as $row)
} else {
echo "Sorry, no results found";
}
_