0

私はこのコードを持っています(その一部だけ):

<?php
if(isset($_GET['act']) && $_GET['act']== 'do')  {
$key= $_POST['key'];
}
else {
$key= '';
}
?>

<input class='inputField' type='text' name='key' size=45 value='<?php echo $key;?>' > 

<script>$(document).ready(function(){
key= $("#mainTop input").val();
if(key!= null || key== '%') {
    showPage(1,key);
}
else    {
    showPage(1);
}
});
</script>

showpage() はパラメーターを取得し、php ファイルに渡します。

if(isset($_GET['key'])) {
$key= addslashes($_GET['key']);
}
else {
$key= null;
}
$result= $db->query("SELECT * FROM information WHERE stuId LIKE '%$key%' OR stuName LIKE '%$key%' LIMIT  $start,10");

php ファイルは、検索するためのキーを取得します。私はaddslashesによってキーをエスケープし、mysqlクエリを実行して検索します。しかし、key = % # _ + で検索すると、代わりにすべてのテーブルが出力され、一致する結果はありません。キーを正しい方法でエスケープしなかったと思いますので、% # _ + などの文字をエスケープして LIKE で mysql クエリを実行するにはどうすればよいですか? 私を助けてください ?別の質問を見ましたが、まだわかりません

4

2 に答える 2

3

私の知る限り、#および+は LIKE 一致文字列の特殊文字ではありませんが、他の文字は単にエスケープする必要があります

$key = str_replace(array('%', '_'), array('\%', '\_'), $key);
于 2013-03-15T03:23:24.863 に答える
1

この問題の解決策は、パラメーター化されたクエリを使用することです。

逃げる心配はありません。
SQL インジェクションから身を守ります。
あなたのコードは、あなたの仲間やあなたを雇おうとしている人々によってより真剣に受け止められるでしょう。

エスケープする必要がある 3 つのレベルを扱っていることに注意してください。EG PHP では'、引用符として解釈したくない場合を除き、エスケープする必要があります'。or are in a statementの\'ような予約文字です。%_LIKE

于 2013-03-15T03:56:52.083 に答える