1

私はPHPのmysql関連のものをすべてPDO形式に変換する過程にあります。そうは言っても、私は何かを尋ねる必要があります。

mysql_num_rows()を使用して返される行数を調べる代わりに、適切な代替手段は次のとおりです。

"SELECT COUNT(*) FROM table"

ええと、PDOでは、次のことを行う方が良いですか。

$stmt = $db->query('SELECT COUNT(*) FROM table');
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
$count = count($results);

また

$stmt = $db->query('SELECT * FROM table');
$count = $stmt->rowCount();

ありがとう

4

4 に答える 4

1

あなたの質問は私には意味がありません。データベースに行数だけを要求する方が、すべての行
自体を要求してからカウントするよりもはるかに優れ ていることをすでにご存知のとおり、異なるdbドライバーを使用している場合は、そうでない場合はどうでしょうか。

あなたの質問に文字通り答えるには:SELECT COUNT(*)これは「良い代替手段」ではありませんが、データベースにクエリを送信するために使用された特定のAPIに関係なく、行をカウントする唯一の適切な方法です。

ただし、コメントで指摘されているように(すでに行を選択していて、返される行数を知りたい場合)、まったく逆になります。追加のクエリを実行してカウントを取得しても意味がなく、API関数は結果セットの行数を取得することが唯一の正しい方法です。
しかしとにかく、これらの問題は、あるAPIから別のAPIへの移行とは無関係です。

更新
Aha、私はあなたの混乱の根源に到達したようです!
データベースサーバーと名前を共有している古いAPI(mysql)に間違えられたようです。
実際のところ、それは別の問題です-MySQL RDBMSはデータベースサーバーですが、PHPのmysql拡張はそのサーバーにアクセスするための単なるAPI(関数のセット)です。
また、PDOはデータベースサーバーではなく、別のAPIです。したがって、クエリに変更はありませんが、DBに送信するために使用している関数にのみ変更があります。それが役に立てば幸い。

于 2013-01-17T08:24:15.563 に答える
1

私はそれが「良い選択肢」であるとは言いません。まったく違うものです。

    SELECT data FROM table

使用できるデータをフェッチします。次に、mysql_num_rows()(またはrowCount()PDOの場合)を使用して、レコード数(レンダリング、ページネーションなど)を取得できます。

(実際のデータではなく)レコード数のみが必要な場合は、次を使用する必要があります。

    SELECT COUNT(data) FROM table

レコードの数のみを選択しているため(正確には、のNULL以外の値をカウントしているため、すべてのレコードを取得するためdataに使用します)。SELECT COUNT(*)

後者を前者と組み合わせて使用​​して両方を取得する場合、2つのクエリ間でレコード数が変わると、問題が発生する可能性があります。

于 2013-01-17T08:33:01.830 に答える
0

aがSELECT COUNTない場合は、GROUP BY常に1つのフィールドを持つ1つの行のみが返されCOUNTます。これは、条件に一致する行の合計数であり、この場合はすべてです。したがって、配列には要素が1つしかないため、count()その結果に対してPHPを実行すると常にが返されます。したがって、これら2つのオプション2が唯一の有効なオプションです。1$results

于 2013-01-17T08:22:52.610 に答える
0

最高はこれでしょう

$nRows = $pdo->query('select count(*) from table')->fetchColumn(); 
echo $nRows;

編集:カウントを削除しました。

于 2013-01-17T08:23:18.473 に答える