【问题标题】:How to prevent apostrophe from being removed PHP MySQL如何防止撇号被删除 PHP MySQL
【发布时间】:2010-11-25 10:20:47
【问题描述】:

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

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

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

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

【问题讨论】:

  • 它... 删除它? 真的

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


【解决方案1】:

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

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

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

【讨论】:

  • +1 用于将人们引向 PDO。说真的,旧的 mysql 库是如此 90 年代:D
【解决方案2】:

mysql_real_escape_string() 不会删除撇号。

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-04
      • 1970-01-01
      • 1970-01-01
      • 2018-05-06
      • 1970-01-01
      相关资源
      最近更新 更多