次のように、準備されたステートメントを使用することと、変数を文字列にエスケープ/変換することの違いを理解しようとしています。
$sql = "SELECT `user_id`, `user_name` FROM table WHERE `user_id` = ? and `user_name`= ?";
$sqlPrepare = $conn->prepare($sql);
$sqlPrepare->bind_param('ss', $user_id, $user_name);
$sqlPrepare->execute();
$result = $ $sqlPrepare->get_result();
if($result->num_rows ===0)
{
// Do work
}
VS
mysqli::real_escape_string($whatever_vars_needed);
$sql = "SELECT `user_id`, `user_name` FROM table WHERE `user_id` = '".$user_id."' and `user_name`= '".$user_name."'";
$sqlQuery = $conn->query($sql);
if($sqlQuery->num_rows ===0)
{
// Do work
}
SQL インジェクションに対する保護に関する限り、どちらも同じ目的を果たしますか? もしそうなら、余分な入力を少し節約できるので、2 番目の方法を使用することをお勧めしませんか?
クエリと準備を使用していることに気づきましたが、それでも変数を文字列に変換している場合、違いはわかりませんか?
より良い方法はどれですか?