dec*_*eze 52
值的转义或转义方式应该没有区别.bindParam不同之处bindValue在于它引用变量,仅在执行语句时绑定值.立即bindValue获取价值.为了显示:
$stmt = $db->prepare('SELECT * FROM `table` WHERE foo = :foo');
$foo = 'foo';
$stmt->bindValue(':foo', $foo);
$foo = 'bar';
$stmt->execute();
Run Code Online (Sandbox Code Playgroud)
以上执行如下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()
Run Code Online (Sandbox Code Playgroud)
以上执行如下SELECT * FROM table WHERE foo = 'bar'.
确实,无论是关心_还是%作为特殊字符,因为一般来说,就语法而言,它们不是特殊字符,并且数据库驱动程序无法分析上下文以确定您是否是 %通配符或LIKE查询上下文中的实际字符"%" .
两者都可以防止SQL注入.
好吧,你把它弄错了.
Bindvalue()并且BindParam()除了参数类型之外,它们都是相同的.
它们都没有逃脱%和_,这无关紧要.这种逃逸只影响返回结果的可靠性,而不影响"注射".