1

mysqliクラスとプリペアドステートメントを使用して、PHPでデータベースハンドラークラスを作成していました。結果を印刷しようとしていました。すぐには機能しなかったので、デバッグを行うことにしました。num_rows()クラスのメソッドを使用しようとしましたmysqli_statementが、0が返され続けました。テストコードの一部を記述して、何が問題になっているのかを確認できるようにしました。その後、必要なデータを返すことができましたが、num_rows()実際にデータを選択して取得している場合でも、メソッドは0を返します。コードは次のとおりです。

$mysqli = new mysqli('localhost', 'username', 'password', 'database');
if(mysqli_connect_errno())
{
  die('connection failed');
}

$statement = $mysqli->stmt_init();

$query = "SELECT name FROM table WHERE id = '2000'";
if($statement->prepare($query))
{
    $statement->execute();
    $statement->bind_result($name);
    $statement->fetch();
    $statement->store_result();
    echo $statement->num_rows();
    echo $name; 
}
else
{
    echo 'prepare statement failed';
    exit();
}

期待される結果は次のとおりです。

1name

そして実際の結果は次のとおりです。

0name

なぜこれなのか誰か教えてもらえますか?

4

4 に答える 4

6

num_rows()が現在の結果セットに関連してレポートしているのではないかと思います。データをフェッチする前に、num_rows()をキャプチャしてみてください。例えば

if($statement->prepare($query))
{
    $statement->execute();
    $statement->store_result();
    echo $statement->num_rows();
    $statement->bind_result($name);
    $statement->fetch();
    echo $name; 
}

それは何か効果がありますか?

于 2008-09-17T05:56:09.127 に答える
0

num_rowsメソッドではなく、プロパティです。

于 2009-03-09T00:33:49.523 に答える
-1

$name を宣言していないようです。

また、bind_result() と fetch() を削除して、次のように表示されるようにしてください。

$statement->execute();

$statement->store_result();

printf("Number of rows: %d.\n", $statement->num_rows);
于 2008-09-17T05:51:42.460 に答える