mysqli_statement::num_rows() が間違った値を返す
質問
私は、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);
所属していません StackOverflow