2010-11-25 22 views
0

我有一个注册系统,它要求用户名。有些人的姓氏中有一个撇号,它阻止了将数据写入MySQL数据库表(例如O'Hare)。如何防止撇号被删除PHP MySQL

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

我想在使用mysql_real_escape_string之前我可以使用Web服务进行名称检查,但是会出现安全漏洞吗?或者SOAP Web服务已经对干净输入做了他们自己的检查?

或者有没有更好的方式来传递PHP保留撇号的变量,但仍然保持安全,MySQL可以接受它?

+1

这是...... *删除*它? *认真*? – 2010-11-25 10:22:02

回答

7

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

所以,如果撇号是“丢失”,那么程序逻辑中可能存在其他地方的错误。

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

+0

为什么downvote? – Jacco 2010-11-25 11:09:54

0

mysql_real_escape_string()不会删除撇号。

您的问题可能在输出端,或其他一些与输入相关的函数。

0

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