2012-01-04 7 views
3

mySQLiでprepare文を使用している場合でも、エスケープやユーザ入力のチェックは必要ですか?私は、コード持っていたのであれば、たとえば:PHP&mySQLi:prepare文を使用する際に、ユーザ入力を確認する必要がありますか?

$members = new mysqli("localhost", "user", "pass", "members"); 
$r_email = $_POST['r_email']; 
$check = $members->prepare("select user_id from users where email = ?"); 
$check->bind_param('s', $r_email); 
$check->execute(); 
$check->store_result(); 
if ($check->num_rows > 0) { 
    echo "user already registered"; 
    $check->close(); 
} 
$members->close(); 

を私は$r_email = $_POST['r_email']

$r_email = mysql_real_escape_string($_POST['r_email']);に感謝を変更する必要があります。

+0

可能な複製[バインドされたパラメータを持つMySQLの準備クエリは安全ですか?](http://stackoverflow.com/questions/1561586/are-php-mysqli-prepared-queries-with-bound-parameters-secure) – outis

答えて

4

それはする必要はありませんパラメータとして渡す場合は、値をエスケープします。実際には、データにリテラルバックスラッシュを挿入するため、そうしないでください。

これらは、準備時にSQLクエリの一部でなければならないため、RDBMSはそれらを解析して検証できます。ユーザー入力をフォームで検証することができます。

SQL文に入れるSQL-Escapeデータです。決してSQL-EscapeデータはSQL文の外にはありません。

6

あなたが準備された文でエスケープする必要はありませんが、それはまだユーザー入力を検証することをお勧めします(例:。必須フィールドは、数値フィールドがなど、数値が含まれて移植されている)

+0

シンプルで分かりやすい回答をいただきありがとうございました。似たような質問を投稿する必要がありません。 – drooh

2

入力をエスケープする必要はありませんが、検証けちるしないでください、あなたはまだ空に提出された電子メール、またはあなたを噛まないように戻ってくる可能性が他の副作用の数のような論理エラーを持つことができます。

バグテストの際に常に検証して、後で気分が良くなりますが、これは私のモットーです。

関連する問題