在PDO :: Prepare页上指出:
“并且通过消除对参数的手动引用来帮助防止SQL注入攻击”
知道这一点,是否有一个像mysql_real_escape_string()这样的PHP函数可以照顾到PDO的转义?还是PDO会为我做好一切转义?
编辑
我现在意识到我问了一个错误的问题。我的问题确实是,“ PDO会为我做什么?” 我现在通过这些答案意识到,它实际上仅消除了对引号进行转义的需要。但是我仍然需要对传递给execute函数的值进行任何其他PHP清理调用。例如htmlentities(),strip_tags()…等…
PDO不会转义变量。变量和SQL命令通过MySQL连接独立传输。和 SQL标记生成器(分析器)从未着眼于价值 。仅将值逐字复制到数据库存储中,而不会造成任何损害。这就是为什么无需将数据与准备好的语句编组在一起的原因。
请注意,这主要是速度优势。使用mysql_real_escape_string(),您首先需要在PHP中编组变量,然后将效率低下的SQL命令发送到服务器,这将导致昂贵的实际SQL命令与值的隔离。这就是为什么经常说安全优势只是隐式的,而不是使用PDO的主要原因。
如果您使用SQL命令并没有实际使用准备好的语句(不好!),那么可以,PDO仍然有一个转义函数:$ pdo-> quote($ string)