PHP で、mySQL データベースを検索して結果を出力する単純な検索スクリプトを作成しました。これがどのように機能するかは次のようになります。
- ユーザーが検索フォームで「jack's」を検索します。
- 私の PHP スクリプト
GET
はこの検索を実行し、サニタイズします。 - 次に、スクリプトは と を使用し
SELECT
てLIKE
結果を取得します。 - 次に、スクリプトは結果をユーザーに出力します。
- 最後に、スクリプトはユーザーに「jack が x 個の結果を返した」ことを伝えます。逃げる助けを借りて。
私が聞きたいのは、私はそれを正しくやっていますか?
これはSELECTING
、データベースから前にサニタイズする方法です。
if(isset($_GET['q'])){
if(strlen(trim($_GET['q'])) >= 2){
$q = trim(mysql_real_escape_string(addcslashes($_GET['q'], '%_')));
$sql = "SELECT name, age, address FROM book WHERE name LIKE '%".$q."%'";
}
}
そして、これは「jack's returned x results.」を出力する前にエスケープする方法です。
echo htmlspecialchars(stripslashes($q)) . " returned x results.";
これは正しい方法ですか?
ちなみに、PDO と mySQLi は、準備済みステートメントを使用して自分自身をサニタイズするため、好まれていることは知っていますが、実際の経験はまったくありません。しかし、初心者向けのチュートリアル/説明をリンクしていただければ、喜んで見ていきます。さらに、何らかの形で注射につながる可能性があるmagic_quotes
と聞きましたが、これは正しいですか?charset