0

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

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

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

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

4

3 回答 3

7

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

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

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

于 2010-11-25T10:23:16.840 回答
0

mysql_real_escape_string()不会删除撇号。

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

于 2010-11-25T10:23:47.713 回答
0

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

于 2011-10-01T16:16:41.373 回答