如何防止删除撇号PHP MySQL

时间:2010-11-25 10:20:47

标签: php mysql mysql-real-escape-string apostrophe

我有一个请求用户名的注册系统。有些人的姓氏有撇号,这阻止了数据被写入MySQL数据库表(例如O'Hare)。

我正在使用mysql_real_escape_string,它正在从字符串中删除撇号。这很好,除了我需要对Web服务使用带撇号的值,否则Web服务将返回false。

我以为在使用mysql_real_escape_string之前我可以使用Web服务进行名称检查,但这是否存在安全漏洞?或者SOAP Web服务是否已经对干净的输入进行了自己的检查?

或者是否有更好的方法来传递变量,从而PHP保留了撇号,但仍保持安全,MySQL可以接受它?

3 个答案:

答案 0 :(得分:7)

您应该向我们展示一些代码,因为mysql_real_escape_string不会删除撇号,而只会删除它们。
转义意味着O'Hare将成为O\'Hare,以便可以将其作为字符串插入:'O\'Hare'。从数据库中检索后,您的值仍应为原始O'Hare

因此,如果撇号“丢失”,程序逻辑中的其他地方可能会出现错误。

另一种选择是从使用MySQL库切换到MySQLi或PDO库来访问您的数据库。后两者支持准备好的陈述。准备好的语句通常被认为是查询数据库的最佳实践。

答案 1 :(得分:0)

mysql_real_escape_string()不会删除撇号。

您的问题可能出在输出端,或其他一些与输入混乱的功能。

答案 2 :(得分:0)

在使用mysql_real_escape_string之前,您需要打开数据库连接,否则它将发生故障。