$keyAndvalues[]="`" . $key . "`" . "=" . "'" . $value . "'"); 这里$value被 ' 包括而不是 ` ,这里的$value 不需要对特殊字符进行转义吗
因为sql中只有库名、表名、字段名可能会与sql关键字冲突,而 ` 这个字符在上面这行代码里就是把字段名括起来,从而避免冲突,至于 value 不需要转义,是的,没错,value 的内容是值,sql在处理值时是不会和关键字冲突的。
嗯嗯。泽成的补充是对的。这个教程好像有个全局过滤。记不太清楚了。
回复 坚持MyDream:不客气,顺便补充说明一下,对于value来说,sql本身是没啥问题的,但是PHP就有问题了,比如就拿教程里面的这种方式,把变量 $value 里的字符串直接拼接成为 sql 语句,就会存在很大的安全隐患,举个例子,假设你开发一个密码登录的接口,$value1 里存的是用户账号,$value2 里存的是用户密码,sql语句是这样子拼的:
$sql = "select * from user where `account` = '".$value1."' and `password` = '".$value2."'";
如果遇到恶意用户,他在登录时把密码填成 123456' or '1' = '1 ,想一下,你最后会得到什么样的sql语句,是不是
select * from user where `account` = 'zhangsan' and `password` = '123456' or '1' = '1'
于是只要 '1' = '1' 成立,sql语句就能执行成功。。。
是不是很可怕?这就叫做 sql 注入,是一种很古老的黑客攻击手段,所以现在一般会用 addslashes 对用户提交的内容进行转义,把那些可能会导致sql注入的关键字给替换掉。