gpt4 book ai didi

php - 如果我在执行函数中绑定(bind)参数,我的 PDO 准备语句是否安全?

转载 作者:行者123 更新时间:2023-12-04 07:33:39 25 4
gpt4 key购买 nike

我有一些表单数据正在使用 PDO 准备语句写入数据库。
此表单数据在进入数据库的途中经过 filter_var() 的过滤和验证函数和正则表达式,当这些数据中的任何一个输出到站点时,它会以 htmlspecialchars() 进行转义.
为了防止我使用的 SQL 注入(inject),我使用下面的代码。当我第一次学习 PDO 时,这是我在教程中看到的,我个人觉得它很容易阅读/理解。
我注意到在 php.net 站点和我最近看到的一些其他代码中,他们使用了 bindparams(),而在下面的代码中,我总是在 execute() 的数组中执行此操作。方法。
我下面的代码安全吗?或者我必须按照第二个代码示例中显示的方式使用 bindparams 吗?
这是一些使用来自网络表单的名字输入的示例代码

<?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();
如果它更安全,那么我显然必须采用第二种方式,但想检查我在第一个代码块中给出的准备好的语句是否安全?

最佳答案

无论哪种方式都很好。安全性的好处是完全使用占位符。在某些情况下(动态构造的查询),使用 bindParam 是有益的。与 execute 分开打电话,还有其他一些你希望避免冗长的地方。用适合你的。

关于php - 如果我在执行函数中绑定(bind)参数,我的 PDO 准备语句是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67826059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com