提问人:pjk_ok 提问时间:6/4/2021 最后编辑:pjk_ok 更新时间:6/4/2021 访问量:94
如果我在 Execute 函数中绑定参数,我的 PDO 准备语句是否安全?
Is My PDO Prepared Statement Secure If I Bind The Parameters In The Execute Function?
问:
我有一些表单数据,我正在使用 PDO 准备语句将其写入数据库。
此表单数据在进入数据库的过程中使用函数和正则表达式进行 santized 和验证,当任何这些数据输出到它使用 .filter_var()
htmlspecialchars()
为了防止我正在使用的 SQL 注入,我使用了下面的代码。当我第一次学习 PDO 时,这是我在教程中看到的,我个人认为它非常容易阅读/理解。
我在 php.net 网站上注意到,在我最近看到的其他一些代码中,他们使用了bindparams(),而在下面的代码中,我总是在方法的数组中执行此操作。execute()
我的代码在下面安全吗?还是必须按照第二个代码示例中显示的方式使用 bindparams?
下面是一些使用来自 Web 表单的 firstname 输入的示例代码
<?php
$firstname = $_POST['firstname'];
$firstname = filter_var($fname, FILTER_SANITIZE_STRING);
if(empty(trim($fname))){
$error[] = "First Name cannot be blank";
}
$sql = "INSERT INTO users (firstname) VALUES (:firstname)";
$stmt = $connection->prepare($sql);
$stmt->execute([
':firstname' => $firstname,
]);
在 php.net 文档中,它使用 执行上述准备好的语句,如果您要更新多个字段,这似乎有点冗长?bindParam()
<?php
$sql = "INSERT INTO users (firstname) VALUES (:firstname)";
$stmt = $connection->prepare($sql);
$stmt->bindParam(':firstname', $firstname);
$stmt->bindParam(':lastname', $lastname);
$stmt->execute();
如果它更安全,那么我显然必须以第二种方式进行,但想检查我在第一个代码块中给出的准备好的语句是否安全?
答:
2赞
hobbs
6/4/2021
#1
无论哪种方式都很好。安全优势在于使用占位符。在某些情况下(动态构造的查询),与调用分开使用是有益的,而在其他情况下,你希望避免冗长。使用适合您的产品。bindParam
execute
评论