mysqli_stmt::$num_rows
を使用する場合 (つまり、プリペアドステートメントの行数を確認します)、$stmt->store_result()
を使用する必要があります プリペアドステートメントを実行した後、行数を確認できるようになります。つまり、返された行数を確認する前に、結果がメモリに保存されます。
$stmt = $conn->prepare($sql);
$stmt->bind_param('ss',$log_username,$log_username);
$stmt->execute();
$stmt->store_result(); // Need to store the result into memory first
if ($stmt->num_rows) {
// ...
ただし、mysqli_result::$num_rows
を使用する場合 (ステートメントの結果から変換するMySQLi-resultで)、$result = $stmt->get_result();
を実行した後にそれを行う必要があります 、$result->num_rows;
を使用します 、以下のように。
$stmt = $conn->prepare($sql);
$stmt->bind_param('ss',$log_username,$log_username);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows) {
while ($row = $result->fetch_assoc()) {
// ....
結局、それらは両方とも同じことをすることになります-元の準備されたクエリによって返される行の数を提供します。
注
store_result()
は使用できないことに注意してください。 およびget_result()
同じステートメントで。つまり、最初の例では、(get_result()
を使用してmysqli-resultオブジェクトに変換することはできません。 、これにより、標準のfetch_assoc()
を使用できます。 方法)。 store_result()
として 結果をメモリに保存します。get_result()
には何もありません 変換する、またはその逆。
これは、store_result()
を使用する場合を意味します 、ステートメントフェッチ、mysqli_stmt::fetch()
を介してフェッチする必要があります mysqli_stmt::bind_result()
を介して結果をバインドします 。 get_result()
を使用する場合 、結果のMySQLi-resultオブジェクトの行数を確認する必要があります(2番目の例を参照)。
そのため、そのうちの1つだけを使用する必要があるようにコードを作成する必要があります。
そうは言っても、affected_rows
を使用する コメントで提案されているように、このジョブに適したツールではありません-mysqli_stmt::$affected_rows
のマニュアルによると (同じことが通常のクエリmysqli::$affected_rows
にも当てはまります ):
- PHP.net on
mysqli_stmt::store_result()
- PHP.net on
mysqli_stmt::get_result()
- PHP.net on
mysqli_stmt::$num_rows