プレースホルダでプリペアドステートメントを使用すると、クエリのフォーマットが正しくないため、SQLインジェクションから身を守る唯一の方法です。しかし、mysqli_real_escape_stringは安全ではありませんが、変数を一重引用符で囲んで使用すると、であることが多くの人々に示唆されています。例えば(クエリ内の単一引用符に注意してください):シングルクォートのMysqli_real_escape_string - それは安全ですか?
だから、$value1 = mysqli_real_escape_string($value1);
$value2 = mysqli_real_escape_string($value2);
$value3 = mysqli_real_escape_string($value3);
mysqli_query("INSERT INTO table (column1, column2, column3)
VALUES ('" . $value1 . "', '" . $value2 . "', '" . $value3 . "')";
:のみ整数と文字列を扱う、上記の例では、mysqliのプリペアドステートメントを使用していたかのように同じように安全であろうと、プレースホルダ?
はありません、関係なく、データタイプのあなたが扱っている、_not_プリペアドステートメントを使用しても_never_ますそれらを使用するのと同じくらい安全です。 –
@ Don'tPanic - 私はあなたのロジックに同意したいと思います。あなたが私に指摘できる証拠? –
http://stackoverflow.com/questions/8263371/how-can-prepared-statements-protect-from-sql-injection-attacks –