質問

私は、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

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

役に立ちましたか?

解決

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; 
}

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

他のヒント

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

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

また、bind_result() と fetch() を削除してみて、次のようになります。

$statement->execute();

$statement->store_result();

printf("Number of rows: %d.\n", $statement->num_rows);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top