使用mysql_real_escape_string()但允许带撇号的名称

Bri*_*ian 2 php mysql

在将它们插入sql数据库之前,我使用mysql_real_escape_string()来验证所有用户输入.其中一个字段是名称,我们遇到了像O'Reilly这样名字的用户的问题.有没有办法使用mysql_real_escape_string()来阻止注入但是在db中允许这些名称?

Mat*_*iva 6

问题很可能是撇号被引用两次:首先是邪恶的,并且在5.3 魔术引号中被弃用,然后是mysql_real_escape_string().

你能做的要么是关闭魔术引号或运行stripslashes()您的输入值,之前他们喂养mysql_real_escape_string()

问题简要说明:

  • 用户输入 O'Reilly
  • 魔术引号自动将其转换为 O\'Reilly
  • 脚本饲料通过mysql_real_escape_string(),它逃脱串反斜线和撇号(再次)产生O\\\'Reilly
  • 执行查询,处理引用并且数据库理解您需要反斜杠撇号,因为它们都是转义的,并且记录O\'Reilly