mysqli bind_param vs '“.$var.”';有什么区别


mysqli bind_param vs '".$var."'; whats the difference?

我试图弄清楚使用预准备语句和将变量转义/转换为字符串之间的区别,如下所示:

$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
                         }

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注入,它们都有相同的目的吗?如果是这样,难道不是首选使用第二种方法,因为它确实节省了一些额外的键入时间吗?

意识到我正在使用查询与准备,但即便如此,如果我将变量转换为字符串,我也没有真正看到区别?

哪种方法更好?

因为它确实节省了一些额外的输入

这是PHP亚文化中非常有趣的现象。
由于某种原因,普通的PHP用户不知道用户定义的函数或任何其他复杂的控件或数据结构。因此,他们"节省一点打字"的唯一想法是摆脱一些"不必要的"操作,如安全措施或错误报告。

浏览这个网站上的php标签,你可能会发现成千上万的手写,其中一些甚至相当聪明 - 但由于某种原因,它们都不涉及用户定义的函数 - 而只是原始PHP函数。