0

過去数日間に使用されたいくつかの質問を見てきましmysqliたが、答えはとの違いを認識していないよう$stmt->execute()です$db->query()

私が理解しているように、の結果にアクセスするための2つの異なるモデルがありますmysqli

column => valueこれは生のSQLを使用し、SQLインジェクション攻撃を防ぐためにプログラマーが入力をエスケープする必要がありますが、プログラマーはマッピングを含む連想配列(またはプレーン配列)を取得できます。

$result_set = $db->query("SAFE SQL QUERY HERE");
while ($row = $result_set->fetch_assoc()) {
     # do something with $row['fieldname'];
}  

または、これを行うこともできます。これにより、パラメーターと結果を適切にバインドできますが、(AFAIK)では単純な配列結果を得ることができません。

$stmt = $db-prepare("SQL QUERY WITH ? PLACEHOLDERS");
$stmt->bind_param("s", $input_variable);
$stmt->execute();
$stmt->bind_results($output_col1, $output_col2);
while ($stmt->fetch()) {
     # do something with $output_col1 and $output_col2
}

私の質問はmysqli、最初のパターンに示されている単純な配列出力を取得する方法はありますが、2番目のパターンに従って安全にバインドされた入力パラメーターを使用する方法はありますか?

とにかくこれを行う方法が見つかりません(代わりに使用する以外PDOに!)。

4

3 に答える 3

1

PHPマニュアルのこのページのコメントにこの種のことを行う関数の複数の実装があります:mysqli_stmt :: fetch

于 2009-03-09T18:05:46.793 に答える
0

私はノーと言うでしょう。mysqli私は大量のステートメントを扱ったり準備したりしていないと思いますが、2番目の例の各ステップは個別で必要であると思います. 私があなたに与えることができる唯一の慰めは、あなたの最初の例では、2番目の例では安全かつ本当に無視できるいくつかのSQLエスケープを見逃したことです.

于 2009-03-09T17:48:06.417 に答える