質問で示したクエリはユーザー指定の値を使用しないため、SQLインジェクションの場合はありませんが、一般的な場合は次のようになります。-
まず、すべてを検証する必要があります クエリで使用する前のユーザー入力(ユーザー名、電子メールなど)。例:-ユーザー名に英数字のみを許可している場合は、データベースクエリの作成に進む前に、入力が実際に英数字であるかどうかを確認する必要があります。また、すべての入力のサイズも確認する必要があります。
その後、私の意見では、プリペアドステートメントはSQLインジェクションを防ぐための最良の選択です。
mysql_real_escape_string()の問題:-
mysql_real_escape_string()はデフォルトの文字セットに従って文字をエスケープするため、addslashes()関数よりも優れており、マルチバイト文字セットの乱用から生じるSQLインジェクション 、ただし別の記事では、ここ 、回避策-注射をまだ行うことができることを説明するシナリオが示されています。
解決策:-
したがって、SQLインジェクションを防ぐための適切でより良い方法は、プリペアドステートメントを使用することです。これは、ユーザー入力(パラメーター)を挿入する前にSQLステートメントをプリコンパイルし、再利用可能なSQLテンプレートとして扱う手法です。したがって、ユーザー入力を実際のSQLコードから分離し、SQLパーサーがユーザー入力を解析することはありません。
セキュリティとは別に、SQLクエリの速度も最適化します。異なるユーザー入力で同じクエリを複数回実行する必要がある場合に役立ちます。
実装の詳細については、PHPのマニュアルを参照してください。