SQL インジェクションをなくしたいのですmysqli_real_escape_string()
が、mysqli を使用する必要がありますか? 例えば
$nick = mysqli_real_escape_string($_POST['nick'])
準備済みステートメントを使用し、文字列データをパラメーターとして渡す必要がありますが、エスケープしないでください。
この例は、ドキュメントから取得されます。
/* create a prepared statement */
if ($stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?")) {
/* bind parameters for markers */
$stmt->bind_param("s", $city);
/* execute query */
$stmt->execute();
/* bind result variables */
$stmt->bind_result($district);
/* fetch value */
$stmt->fetch();
printf("%s is in district %s\n", $city, $district);
/* close statement */
$stmt->close();
}
この例ではを呼び出さ ないmysqli_real_escape_string
ことに注意してください。文字列をクエリに直接埋め込む場合にのみ使用する必要がありmysqli_real_escape_string
ますが、これを行わないことをお勧めします。可能な限り、常にパラメーターを使用してください。
関連している
はい、プレースホルダーまたはある種のクエリ ビルダーを使用して、独自のクエリ プロセッサを実装する場合は、mysqli_real_escape_string を使用して文字列をフォーマットできます。
コードで生の API 関数を使用することを計画している場合 (これは明らかに間違った慣行ですが、地元の人々によって非常に普及しています) - 準備されたステートメントを使用することをお勧めします。
とにかく、この機能だけでは「SQL インジェクションをなくす」ことはできません。mysql(i)_real_escape_string
関数はインジェクションを防止しないため、いかなる保護にも使用しないでください。