0

私はPHPファイル内にこのクエリを持っています:

return $this->_getDb()->fetchRow('
SELECT *
FROM xf_user
WHERE user_id = ?
', $userId);

最後の行は何をしますか、そしてグーグルでざっと調べた後、私は疑問符が動的パラメータであることがわかりました。誰かが私にそれについてより詳細な説明を与えることができますか?ありがとう。

4

2 に答える 2

3

コマンドの一部が欠落しています (引用符のバランスが取れていないことに注意してください)。最初に 1 つか 2 つの行を省略したのではないかと思います。 (ユーザーが投稿を編集して、欠落している行を含めました)。

パラメータが行うことは、パラメータの値 ($userID 変数に保持される値) を取得し、それを使用して SQL クエリを評価することです。したがって、$userID に値 101 が含まれている場合、実行されるクエリは基本的にSELECT * FROM xf_user WHERE user_id = 101.

ただし、パラメーターは型チェックされており、SQL インジェクション攻撃に対して安全であるため、パラメーターを使用することは、単純にクエリをテキスト ステートメントとして作成することとは異なります。また、$userID に新しい値を指定して同じコマンドを複数回実行すると、SQL エンジンはステートメントを実行するたびにではなく一度だけ「準備」できるため、実行速度が向上します。

于 2012-09-14T15:44:14.590 に答える
0

プリペアドステートメントを使用しているようです。を使用すると、MySQLサーバーで動的パラメータが渡されることを期待してクエリを「準備」できます。次に、別の操作で必要なパラメータを送信します。

これにより、パフォーマンスが向上するだけでなく、SQLインジェクション攻撃を防ぐ上でセキュリティ上の大きなメリットが得られます。

MySQLIを使用していないように見えますが、詳細な背景情報については、PHP mysqli::prepareのドキュメントをお読みください。

http://php.net/manual/en/mysqli.prepare.php

于 2012-09-14T15:46:49.237 に答える