12

私は簡単な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値を返しているようです。

これについてのアイデアや説明はありますか?

4

5 に答える 5

18

データベースから行を返すクエリを実行し、結果から最初の行を変数にフェッチしてから、その行の最初の列をエコーし​​ました。

カウントする場合は、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;
于 2012-11-02T13:16:26.380 に答える
9

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ステートメントであった場合、一部のデータベースは、そのステートメントによって返された行数を返す場合があります。ただし、この動作はすべてのデータベースで保証されているわけではなく、ポータブルアプリケーションでは信頼できません。

ドキュメンテーション

于 2012-11-02T13:15:40.030 に答える
3

id主キーの用途は次のとおりです。

 SELECT COUNT(id) FROM coursescompleted WHERE person=:p;

count(*)は避けてください。ストレージエンジンがInnoDB(おそらくMyIsam以外の他のもの)の場合、パフォーマンスが低下します。

于 2012-11-02T13:24:52.367 に答える
0

配列echo count($rows);として試してください。$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";
}
于 2012-11-02T13:15:13.883 に答える
-3

あなたはこれを使うことができます

<?php
$result = $db->prepare("select id, course from coursescompleted where person=:p"); 
$result ->bindParam(':p', $q, PDO::PARAM_INT);
$result->execute();
$rows = $result->rowCount();
echo $rows;
?>

SELECTこれは、クエリでは機能しない場合があります。しかし、個人的な経験に基づいており、他のデータベースシステムへの移植については言及していなかったため、MySQLで動作するはずです。

詳細については、PHPのマニュアルをご覧ください。

于 2016-02-16T10:22:50.217 に答える