我试图找出使用预准备语句和将变量转换/转换为字符串之间的区别,如下所示:
$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注入而言,它们是否会起到同样的作用?如果是这样,是不是首选使用第二种方法,因为它确实节省了一些额外的输入?
我意识到我正在使用查询与准备,但即便如此,如果我将变量转换为字符串,我真的没有看到差异吗?
哪种方法比较好?
答案 0 :(得分:3)
因为它确实节省了一些额外的打字
这是PHP亚文化的一个非常有趣的现象 出于某种原因,常规PHP用户不知道用户定义的函数或任何其他复杂的控件或数据结构。因此,他们唯一的“节省点打字”的想法是摆脱一些“不必要的”操作,如安全措施或错误报告。
浏览此网站上的php标记,您可能会发现数以千计的短手,其中一些甚至非常聪明 - 但由于某些原因,它们都不涉及用户定义的函数 - 而只是原始的PHP函数。