最初のポイント:mysql_real_escape_string()
からエラーが発生した場合 、データベースに接続する前に関数を呼び出しているためです。
クエリを実行する直前にデータベースに接続しているようです。したがって、mm_mysqlquery()
を呼び出す前に行うことはすべて 関数には接続がありません。
mysql_real_escape_string()
関数はデータベースへのライブ接続を必要とするため、接続の文字セットに関して適切な種類のエスケープを実行できます。したがって、前に接続する必要があります あなたは逃げます。
とにかくそれを行う方が良いです。単一のPHPリクエストの過程で複数のクエリを実行する場合、1回接続するオーバーヘッドが少なくなるからです。 すべてのクエリに同じ接続を使用します。
次に、addslashes()
の使用を提案しないでください。 --mysql_real_escape_string()
と同じことはしません 。この2つは互換性がありません。 mysql_real_escape_string()
を使用する習慣を身に付ける必要があります 。
第三に、sani()
関数は一般的な誤解を示しています。
function sani($string){
$string = strip_tags($string);
$string = htmlspecialchars($string);
$string = trim(rtrim(ltrim($string)));
$string = mysql_real_escape_string($string);
return $string;
}
よくある誤解は、SQLステートメントで文字列を安全にするためにこれらすべての関数が必要であるというものです。あなたはそうしない。 mysql_real_escape_string()
のみ 必要です。この例の他のすべての関数は、SQLインジェクションから保護するために何もしません。
これらの関数は、HTMLプレゼンテーションで文字列を出力し、XSS攻撃のリスクを減らしたい場合に役立ちますが、mysql_real_escape_string()
無関係です。
適切な状況で各タイプの消毒方法を使用してください。