Mysql入门系列:需要避免的MYSQL客户机程序设计错误
2006-12-31 10:50:16 来源:WEB开发网核心提示: 6.8.2 对查询中有疑问的数据进行编码包括引号、空值和反斜线的数据值,如果把它们插入到查询中,Mysql入门系列:需要避免的MYSQL客户机程序设计错误(2),在执行查询时就会产生一些问题,下面的讨论论述了这些难点,它完全由数字和短线组成,那么就不必调用mysql_ escape _ s
6.8.2 对查询中有疑问的数据进行编码
包括引号、空值和反斜线的数据值,如果把它们插入到查询中,在执行查询时就会产生一些问题。下面的讨论论述了这些难点,并介绍了解决的办法。假设要建造一个SELECT 查询,它基于由name 指向的空终结串的内容:
如果name 的值类似于“0’Malley, Brian”,这时进行的查询就是非法的,因为引号在引用的字符串里出现:
需要特别注意这个引号,以便使服务器不将它解释为name 的结尾。一种方法是在字符串内使用双引号,这就是ANSI SQL 约定。SQL 支持这个约定,也允许引号在反斜线后使用:
另一个有问题之处是查询中任意二进制数据的使用,例如,在把图形存储到数据库这样的应用程序中会发生这种情况。因为二进制数值含有一些字符,把它放到查询中是不安全的。为了解决这个问题,可使用mysql_ escape _ string( ),它可以对特殊字符进行编码,使其在引用的字符串中可以使用。mysql_escape_string() 认为的特殊字符是指空字符、单引号、双引号、反斜线、换行符、回车符和C ontrol - Z(最后一个在Windows 语言环境中出现)。什么时候使用mysql_escape_string() 呢?最保险的回答是“始终”。然而,如果确信数据的形式并且知道它是正确的—可能因为预先执行了确认检查—就不必编码了。例如,如果处理电话号码的字符串,它完全由数字和短线组成,那么就不必调用mysql_ escape _ string( )了,否则还是要调用。
更多精彩
赞助商链接