2013-05-24 6 views
9

私は準備文について学び、複数の結果行を生成するクエリを処理しようとしています。今、私は行の数を決定し、その数値をhtmlに表示する方法を理解しようとしています。準備済みの文 - 行数

私のプリペアドステートメントは次のようになります。

if($stmt = $mysqli -> prepare("SELECT field1, field2, field3 FROM table WHERE id= ?ORDER BY id ASC")) 
    { 
    /* Bind parameters, s - string, b - blob, i - int, etc */ 
    $stmt -> bind_param("i", $id); 
    $stmt -> execute(); 

    /* Bind results */ 
    $stmt -> bind_result($testfield1, $testfield2, $testfield3); 

    /* Fetch the value */ 
    $stmt -> fetch(); 

    /* Close statement */ 
    $stmt -> close(); 
    } 

私は、このように、num_rowsを使用し、私は最初に結果を保存することになってることを理解:私は、しかし

$stmt->store_result(); 
$stmt->num_rows; 

私がそのコードをそこに置くと、ページが盗み出されて実行され、問題が発生します。私は行の数を表示する方法の次のステップにも到達することができません

質問: <?php echo '# rows: '.$WHATGOESHERE;?>

ありがとうございます!

答えて

12

num_rowsは、変数に格納する必要があります。

/*.....other code...*/ 
$numberofrows = $stmt->num_rows; 
/*.....other code...*/ 

echo '# rows: '.$numberofrows; 

だから、完全なコードは次のようなものでなければなりません:

if($stmt = $mysqli -> prepare("SELECT field1, field2, field3 FROM table WHERE id= ? ORDER BY id ASC")) 
    { 
    /* Bind parameters, s - string, b - blob, i - int, etc */ 
    $stmt -> bind_param("i", $id); 
    $stmt -> execute(); 

    /* Bind results */ 
    $stmt -> bind_result($testfield1, $testfield2, $testfield3); 

    /* Fetch the value */ 
    $stmt -> fetch(); 
    $numberofrows = $stmt->num_rows; 

    /* Close statement */ 
    $stmt -> close(); 
    } 
echo '# rows: '.$numberofrows; 
+0

それは私が投稿プリペアドステートメントに行くのですか? execute()の後に? bind_resultの後、またはフェッチしますか?それは問題ですか? – Kevin

+0

@ケビン私はそう信じていない。それが実行後に行くことを確認してください。それはうまくいくはずです。 –

+0

ああ、ところで、 '?'と 'ORDER BY'の間のスペースを忘れてしまいました。私はその答えを更新するよ –

-2

チェックアウトの例ここでは#2: PHP.net

使用PDO ::クエリ()を使って意図するSELECT文として同様の述部を持つSELECT COUNT(*)文を発行すると、その後にPDOStatementを使用します。 :返される行数を取得するfetchColumn()。これにより、アプリケーションは正しい処理を実行できます。

関連する問題