php mysql 字符转义问题
后台处理
$name=addslashes($_POST['name']);//转义单引号
insert的时候,是不是带着转义符号一起存到数据库里?还是去掉转义符号存进去?
如果是带着转义符号存入到数据库,这就出现了一个小问题
如果我要查义name是不是重复,就需要对$name进行比较
依然进行转义 $name=addslashes($_POST['name']);
SELECT count(*) AS num FROM talbe WHERE name = $name
num显示的是0,也就是说找不到相同的,
打印sql语句为 SELECT count(*) AS num FROM talbe WHERE name = 'this/'s a apple'
num的值为零,我打开数据库发现,name这个字段的值是 this/'s a apple,这样肯定不能找到
如果将$name,再转义一次才能找到,$name的值就是 this///'s a apple 才能找到纪录
也就是说用两次addslashes函数
请问大家是如何处理这样的问题?如果要用两次不是很麻烦吗?
------解决方案--------------------
再就是如果Php.ini开启了magic_quotes_gpc,那么cookie啊,post,get啊,都会默认就addslashes过了,比如用户上传的是li'lei,那么你$_POST['name']得到就是li'lei, 这样直接拼接到sql里:
select * from table where name='li'lei'就行了,不需要addslashes了。
如果你给它addslashes了,那就变态了,因为也会影响mysql解析命令,所以addslashes也会转移它,结果就真的变态了:
addslashes("li'lei");将生成li\'lei, 拼成sql:
select * from table where name='li\'lei',入库后实际就是li'lei,多了一个。
再另外,stripslashes很少使用,因为一般只有php.ini默认开启了magic_quotes_gpc(get,post,cookie的意思)的情况下,如果我们希望使用到用户真正提交的值,比如li'lei,那么需要做stripslashes($_POST['name']); 而这里的name是被自动addslahes过的li'lei, strip后就是li'lei了。
如果不strip,那么输出到页面上,用户看到的会是li'lei。
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号