我试图弄清楚使用准备好的语句和将变量转义/转换为字符串之间的区别,如下所示:
$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 注入而言,它们是否具有相同的目的?如果是这样,是否最好使用第二种方法,因为它确实节省了一些额外的输入?
我意识到我正在使用查询与准备,但即便如此,如果我将变量转换为字符串,我也看不出有什么区别?
哪种方法更好?