-2

PDOでクエリパラメーターを構築しているPHPに次の行があります。

$p[':criteria'] = '%' . $search . '%';

問題の MySQL の行は次のようになります。

d.d_name LIKE :criteria

問題は、$search に数値を入力すると、それが文字に変換されることです。たとえば、$search を次のように設定した場合:

6008

私はそれが欲しい:

%6008%

しかし、私が得るものは次のとおりです。

`08%

最初の2文字を%エンコードしているようです。urldecode() を使用して元に戻そうとしましたが、うまくいきませんでした。文字列は `08% のままです。

どうすればこれを防ぐことができますか?

4

3 に答える 3

0

バインド メカニズムは、多くの型を処理する必要があり、このようないくつかのエッジ ケースがあるため、あまりにも一般的です。

したがって、この場合、bind を使用する代わりに、クエリを文字列としてマウントします。

$sql = "...whatever d.d_name LIKE '%" . $search . "%'";

$search をデバッグして、連結する前に引用符などがないことを確認します。トリムなどで取り除く場合。

また、SQL インジェクション攻撃のため、$search を正しく検証してください。

于 2016-05-06T21:15:13.423 に答える
-1

文字列エスケープについて読むことをお勧めします。この問題を解決するのに役立つかもしれません。また、プログラミングの基礎として知っておくとよいこともあります。

于 2016-05-06T21:28:33.810 に答える