答えて
PDO::FETCH_NUM:を使用するには、フェッチされていない列0
から始まり、結果セットに返される列番号をインデックスとする配列を返します。行数は全くありません。
SELECT COUNT(*) FROM coursescompleted where person=:p
このクエリは、$rows[0];
EDITで合計行を返します: は@線の回答を参照してください。 count(id)
を使用すると、InnoDBの場合はcount(*)
よりも優れています。
以前のクエリから次のように行数を取得できます。
$row_count = $result->rowCount();
しかし、警告が表示さ:
関連するPDOStatementによって実行された最後のSQL文が SELECT文だった場合、いくつかのデータベースは、そのステートメントによって返される行 の数を返すことがあります。ただし、この動作はすべてのデータベースで が保証されておらず、ポータブル アプリケーションには依存しないでください。
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";
}
PHPマニュアルです。 PDOStatement :: fetch()は単一の行を返します。 PDOStatement :: fetchAll()は結果セットを配列として返す – Stephen
これは、「エコーはクエリの返されたレコードの数ではなく、レコードのID値を返すように思われる」という質問です。 –
実際にはクエリの内容が必要なようには見えませんが、SQLの 'count()'が望ましいです。 –
あなたがデータベースから行を返すクエリを実行しましたが、変数に結果から最初の行をフェッチし、その行の最初の列をecho'd。
あなたがカウントしたい場合は、id
を想定すると、SQLの数()
$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;
が主キーを使用することであるか:
SELECT COUNT(id) FROM coursescompleted WHERE person=:p;
は、COUNT(*)を避けてください。ストレージエンジンがInnoDB(おそらくMyIsam以外のもの)の場合は、パフォーマンスが低下します。
パフォーマンスヒットがありますか? [この回答](http://stackoverflow.com/a/1697144/759019)はそうでなければ、mysqlのために言います。 –
@Cthulhu私は確信しています。 MyISAMは、idが同じ時間内にPKである(メモリテーブルもcount(*)で良い)が、テーブルがInnodbストレージエンジンならば、count(*)とcountあなたの足を撃つ:http://www.mysqlperformanceblog.com/2006/12/01/count-for-innodb-tables/ – Ray
あなたはこれが時々SELECT
クエリでは動作しません。この
<?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;
?>
を使用することができます。しかし、個人的な経験に基づいて、他のデータベースシステムに移植することは言及していないので、MySQL上で動作するはずです。
詳細情報は、これが彼にフェッチされる列の数、すなわち2、毎回を与えるだろうhere
- 1. PHP PDOクエリを準備する
- 2. PHP PDO準備文のクエリは
- 3. PHP PDO +準備文
- 4. PHP PDO準備文
- 5. PHP PDO準備文 - MySQL LIKEクエリ
- 6. コール(準備)は、非オブジェクトPDO
- 7. PDO Numステートメントの準備行
- 8. "準備中" PDO機能エラー
- 9. PHP PDO:準備文質問
- 10. 準備中のPDO/Codeigniterエラー
- 11. PDOは、だから私は従って準備されたクエリを抱えている
- 12. サブクエリを使用したPDOの準備
- 13. PDO準備ステートメントの安全性
- 14. 準備中のPDO設定値
- 15. PDO準備文が十分です
- 16. は私のPDOクエリ
- 17. PDOの準備文が挿入されていない
- 18. はPDOによって追加の引用符の扱い::(準備)
- 19. PDOは文を準備しました。すべてを選択
- 20. PDOは、ユーザーが、私はPDOの初心者だといくつかのPHP/PDOコードを準備して実行する必要が
- 21. 私のクエリはPHPのPDO
- 22. PHP PDOは(NOWとの声明を準備しません)
- 23. PDO準備文を解放する(DEALLOCATE PREPARE)
- 24. PDOで動的準備文を操作する
- 25. PDO準備文は何もしません。
- 26. PDOは、インサートが、私はPDOを使用して、私のデータベースに私のフォーム(createBuilder)からデータを挿入しようとすると、カスタム要求を準備
- 27. PHP PDO mysqlによる準備と参加
- 28. 準備完了ステートメントPDOが0行を返す
- 29. PDO準備文でMySQL IN操作に値を渡す?
- 30. PDOがmysqlステートメントを準備してwhileループを使用してフェッチする
ありがとう、完璧に動作します。私の問題は私の体にある 'while($ row = $ result-> fetch(PDO :: FETCH_ASSOC))'を使ってリトラーされた結果を取得する '' mysqlの単一のクエリで両方を達成するにはどうすればいいのですか?再度、感謝します。 – Smudger
わかりません。古いクエリで '$ row_count = $ result-> rowCount();'を試してみませんか?いくつかの報告では、PDO_MySQLドライバは、それ以外のことを言っているドキュメントにもかかわらず、そのドライバを動作させることができます。 –
それがうまくいかない場合は、 'fetch'で行を反復処理するときにPHPで行数をカウントできると思います。どのように悪いか分からない。 –