0

準備済みステートメントを使用する場合、現在 2 つのクエリを実行しています。1 つは結果を取得するためのもので、もう 1 つは見つかった行数を取得するためのものです。以前は、mysql_num_rows. 大きなクエリでは、クエリをコピーして貼り付けて、すべてのクエリで COUNT を使用する必要はありません。のように 1 つのクエリでこれを行う方法はありますmysql_num_rowsか?

 $connectdb->prepare("SELECT * FROM users WHERE username=:username");
        $connectdb->prepare("SELECT COUNT(*) FROM users WHERE username=:username");
    $query = $connectdb->execute(array(':username'=>$username));                                    
            $numrows = $query->fetchColumn();

             if($numrows!=0) {
               while(false !==($row = $query->fetch()))
               {
4

3 に答える 3

1

ステートメントにはすでに行数があります。PDOStatement::rowCount()

したがって$query->rowCount();、最初のクエリのみを使用してください

PS:あなたのコードはそれがうまくいくようにも見えません。正しいものは次のとおりです。

$stmt = $connectdb->prepare("SELECT * FROM users WHERE username=:username");
$stmt->execute(array(':username'=>$username));                                    
...
于 2012-07-04T04:37:00.027 に答える
1
$query=$connectdb->prepare("SELECT * FROM users WHERE username=:username");
    $query->execute(array(':username'=>$username));                                    
            $numrows = $query->rowCount();
于 2012-07-04T04:39:30.257 に答える
0

PDO には 3 つのオプションがあります。

1)を使用して、現在持っているものCOUNT():

$numrows = $query->fetchColumn();

2) fetchColumn()クエリ自体を実行せずに:

$pdo->query("SELECT COUNT(*) from users")->fetchColumn(); 

3) rowCount() - どうやら MySQL では動作しないため、これはお勧めしません。

PDOStatement::rowCount();

編集- 明確にするために - 番号 3、これは PDO Doc からの参照です。

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

于 2012-07-04T04:43:59.650 に答える