日期:2014-05-17  浏览次数:20570 次

刚才搜了一下,好像都挺复杂的。

我说一下我的想法:
首先不知道MySQL是不是所有类型的数据都可以加上单引号,我刚才试了一下,在整数左右加上单引号好像是没有问题。
如果确实任何类型的数据都可以加单引号的话,那么就在生成MySQL语句的时候为任何数据都加上单引号,然后使用mysql_escape_string将接收到的字符中的所有特殊字符转义。这样就可以将接收到的字符串完全“限制”在单引号之间了。

但是就算这样好像也是不能一劳永逸,因为类似like子句后面的字符串中的转义和正常的字符串好像是不一样的。另外如果AMP中任何一个的更新涉及到转义的话,可能都会出现问题。这两个问题有没有一劳永逸地解决的方法?还有没有其他的问题?

其他的数据库所有类型的数据都可以加单引号么?

------解决方案--------------------
对于 mysql 自然是没有问题的
like子句后面的字符串中的转义(对%、?)与转义单引号没有任何关系

如果要兼容其他数据库,那么你应该使用 PDO 来操作数据库。PDO::quote 就是用于转义的(不同的数据库的转义符也是不一样的),而 PDO::prepare 更可以做到不需要显式的转义