gpt4 book ai didi

php - 为什么我应该使用 bindValue/Param 而不是普通变量?

转载 作者:行者123 更新时间:2023-11-29 04:49:28 30 4
gpt4 key购买 nike

我可以看到很多关于为什么使用 PDO bindValue 与 bindValue 更好的讨论。但是我找不到关于为什么我应该在查询中使用它与简单变量的详细信息。谁能告诉我?谢谢

$sex = 'male';
$s = $dbh->prepare('SELECT name FROM students WHERE sex = :sex');
$s->bindParam(':sex', $sex);
$s->execute();

对比

$sex = 'male';
$s = $dbh->query('SELECT name FROM students WHERE sex = $sex'); // OR PREPARE, The question is how to pass the variable.

最佳答案

正如其他人所说,您想使用 PDO 来防止 SQL 注入(inject)。假设有恶意的用户在您网站的输入框中键入类似 ';drop table students;-- 的内容。如果没有 PDO,最终查询将如下所示:

SELECT name FROM students WHERE sex = '';drop table students;--'

看看会发生什么? select 语句将运行但找不到任何结果(除非您的表中有未指定性别的学生)。然后,drop 语句将运行,您的整个学生表将被删除。

这只是一个例子——有各种各样的 SQL 注入(inject)攻击,其中许多比这更危险。使用 PDO 可以防止几乎所有这些。在内部,绑定(bind)变量与查询本身保持分离。

关于php - 为什么我应该使用 bindValue/Param 而不是普通变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13475901/

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