0

リテラルquery呼び出しから準備済みステートメントに移行しようとしています。

クラスに次の機能があります。

public function read ($identifier) {
    $stmt = static::$mysqli->prepare('SELECT * FROM `table` WHERE `id` = ?;');
    $stmt->bind_param('i', $identifier);
    $stmt->execute();

    var_dump($stmt->num_rows);
}

phpMyAdmin から、データベースに ID 1 の行があることはわかっていますが、呼び出すread(1);num_rows0 になります。

ただし、このロジックを使用すると:

public function read ($identifier) {
    $result = static::$mysqli->query('SELECT * FROM `table` WHERE `id` = '.(int) $identifier.';');
    var_dump($result->num_rows);
}

代わりに1を取得します。

4

1 に答える 1

2

$stmt->store_result();通話後に通話してみてくださいexecute()
実行後、結果はまだメモリに格納されていません。すべての行をフェッチするかstore_result()、変数を呼び出して、num_rows影響を受ける実際の行数を表示する必要があります。

于 2013-12-13T21:28:27.350 に答える