bindValue()和bindParam()之间的混乱呢?(Confusion between b

2019-07-18 10:45发布

我这两个功能之间的混淆Bindvalue()BindParam()

  1. 我读了php.net它不逃避%_ ,使用时要小心LIKE 。 所以,我认为BindValue()时,我们使用的是像查询不被使用。
  2. 当我们使用LIKE查询BindParam()被使用。 因为我知道BindParam可以逃避这些%_
  3. BindValue()不为阻止SQL注入防护。 我不知道这事,是真的吗?

朋友告诉我提及这3点是对还是错。 我是初学者在PDO所以请解释清楚..

Answer 1:

应该有值如何转义或没有逃过没有区别。 bindParam不同于bindValue ,它引用变量,结合价值,只有当你执行该语句。 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注入。



Answer 2:

嗯,你把一切都错了。

Bindvalue()BindParam()是在除了参数类型任一方式相同。

  • Bindvalue()结合只是一个数值,它就像AA 硬拷贝
  • BindParam()结合的变量,并且当变量得到了改变,该绑定值将被改变了。

他们都不要逃避%和_,这并没有太大的关系。 这样的转义影响返回的结果,而不是什么“注射”的仅可靠性。



文章来源: Confusion between bindValue() and bindParam()?