我这两个功能之间的混淆Bindvalue()
和BindParam()
- 我读了php.net它不逃避
%
和_
,使用时要小心LIKE
。 所以,我认为BindValue()
时,我们使用的是像查询不被使用。 - 当我们使用
LIKE
查询BindParam()
被使用。 因为我知道BindParam可以逃避这些%
和_
。 -
BindValue()
不为阻止SQL注入防护。 我不知道这事,是真的吗?
朋友告诉我提及这3点是对还是错。 我是初学者在PDO所以请解释清楚..
应该有值如何转义或没有逃过没有区别。 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注入。
嗯,你把一切都错了。
Bindvalue()
和BindParam()
是在除了参数类型任一方式相同。
- Bindvalue()结合只是一个数值,它就像AA 硬拷贝 。
- BindParam()结合的变量,并且当变量得到了改变,该绑定值将被改变了。
他们都不要逃避%和_,这并没有太大的关系。 这样的转义影响返回的结果,而不是什么“注射”的仅可靠性。