mysql数据表之间数据相互传递的问题
近日,某操作需要从一个表(表A)读取一些数据,然后直接写入另外一个表(表B)(相当于一个备份)
平时没啥问题,某天测试MM将一些乱七八糟的数据写入后就出问题了,这些数据从页面提交到表A时没有问题,
但是从表A读取后写入表B确实有问题,将错误的SQL输出,发现其中包含单引号等一些在SQL中特殊的字符,
此时,需要将这些数据过滤,简单处理:使用addslashes函数,
string addslashes ( string str )
返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。这些字符是单引号(’)、双引号(”)、反斜线(\)与 NUL(NULL 字符)。
在官方手册中也有提到使用这个函数作为数据写入数据库的一个示例
结论:写入数据表之前需要将所有的数据过滤,以防SQL注入或其它特殊字符的写入错误!
另外,addslashes对于防止SQL注入有一些用处,但是对于引号,可以用0xbf27来代替单引号,而addslashes只是将0xbf27修改为0xbf5c27,成为一个有效的多字节字符,其中的0xbf5c仍会被看作是单引号,所以addslashes此时无法防止SQL注入。此函数的用于单字节字符串的处理会比较有用。然而多字节字符还是用mysql_real_escape_string好些。