gpt4 book ai didi

php - 混淆了bindValue() 和bindParam() 之间的关系吗?

转载 作者:行者123 更新时间:2023-11-29 23:25:34 24 4
gpt4 key购买 nike

我对这两个函数 Bindvalue()BindParam()

感到困惑
  1. 我在 php.net 上看到它不会转义 %_,所以使用 LIKE 时要小心。所以我认为当我们使用 LIKE 查询时,不会使用 BindValue()
  2. 当我们使用LIKE查询时,使用BindParam()。因为据我所知 BindParam 可以转义这些 %_
  3. BindValue() 不提供针对 SQL 注入(inject)的保护。我不确定这是真的吗?

friend 们说说我说的这三点是对是错。我是 PDO 的初学者,所以请清楚地解释一下..

最佳答案

转义或不转义值的方式应该没有区别。 bindParam不同于bindValue因为它引用变量,仅在执行语句时绑定(bind)值。 bindValue立即获取。举例说明:

$stmt = $db->prepare('SELECT * FROM `table` WHERE foo = :foo');

$foo = 'foo';
$stmt->bindValue(':foo', $foo);
$foo = 'bar';

$stmt->execute();

上面的执行方式类似于 SELECT * FROM table WHERE foo = 'foo' ;

$stmt = $db->prepare('SELECT * FROM `table` WHERE foo = :foo');

$foo = 'foo';
$stmt->bindParam(':foo', $foo);
$foo = 'bar';

$stmt->execute()

上面的执行方式类似于 SELECT * FROM table WHERE foo = 'bar' .

确实,双方都不关心_%作为特殊字符,因为一般来说,就语法而言,它们不是特殊字符,并且数据库驱动程序无法分析上下文来确定您的意思是否是 %LIKE 上下文中的通配符或实际字符“%”查询。

两者都可以防止 SQL 注入(inject)。

关于php - 混淆了bindValue() 和bindParam() 之间的关系吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27001254/

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