2

PHPで安全な検索クエリを作成しようとしています。

これまでのところ、これは間違っている私のコードです:

else if(!ctype_alpha($searchkey) && !is_numeric($searchkey) &&!ctype_print($searchkey)){
    $data['errMsg'] = "Please enter a valid search key.";
}

ちょっと良いですがctype_print、SQL インジェクションに対して安全ではない非アルファ文字を受け入れます。空白を許可するが、英数字以外の文字を禁止するには、何を使用できますか? ありがとうございました。すべての回答は大歓迎です。

編集:

だから私はそれを手に入れました。時々、私はとても愚かになります。安全でない入力を取得しないようにするために、PHP のmysql_real_escape_string. 申し訳ありません。

4

4 に答える 4

1

試してみてください:

function coolCheck($string) {
    return preg_match("/^[a-zA-Z0-9\s]*$/", $string);
}
于 2013-09-03T14:24:44.040 に答える
1

SQL インジェクションから防御しようとしている場合は、準備済みステートメント (PDO の例) を使用します。

$stmt = $dbh->prepare('SELECT stuff FROM table WHERE input = ?');
$stmt->execute($searchkey);

foreach($stmt as $row){
    //do something
}

これは、作成できるどの入力サニタイズよりもはるかに効果的です。

検索クエリを特定の方法でフォーマットするだけの場合は、これを無視してctype_alnum($searchKey)、PHP マニュアルのようなものを使用してください: http://php.net/manual/en/function.ctype-alnum.php

于 2013-09-03T14:25:06.137 に答える
0
preg_match('/[a-zA-Z0-9\s]+/', $searchkey);
于 2013-09-03T14:20:09.550 に答える
-1

使用ctype_alnum()機能:

!ctype_alnum($searchkey)

これは、文字列が英数字かどうかをチェックします

于 2013-09-03T14:19:11.880 に答える