【问题标题】:Should I try to rid my MySQL database of back-slashes?我应该尝试摆脱我的 MySQL 数据库的反斜杠吗?
【发布时间】:2012-06-18 08:55:59
【问题描述】:

我正在使用 PDO 准备语句将数据插入 MySQL 数据库,我注意到字符串中的撇号(单引号)存储在数据库中,前面带有反斜杠 (\)。

我在输出上使用stripslashes($string),当然这会摆脱它们。

我在我的服务器的phpinfo() 信息(PHP 版本 5.2.17)中搜索“magic_quotes”并找到:

  • magic_quotes_gpc:本地值 = 开启,主值 = 开启
  • magic_quotes_runtime:本地值 = 关闭,主值 = 关闭
  • magic_quotes_sybase:本地值 = 关闭,主值 = 关闭

首先,关闭magic_quotes_gpc 会阻止反斜杠的出现吗?我目前无法访问服务器 php.ini 主设置,但据我了解,我可以通过使用指令 php_flag magic_quotes_gpc Off 配置根 .htaccess 文件来禁用它。

其次,在数据库中防止这些反斜杠是否可取?我问这个是因为我看到了 here 有点神秘的评论“三思而后行”。

【问题讨论】:

    标签: mysql magic-quotes-gpc


    【解决方案1】:

    关闭magic_quotes_gpc 会阻止反斜杠的出现吗?

    可能是的。

    是否需要在数据库中防止这些反斜杠?

    是的。他们没有任何目的。如果你使用 PDO 和适当的参数化查询,魔术引号用来解决的问题已经解决了。

    请参阅the PHP manual on magic quotes,了解使用它们的原因以及不应再使用它们的原因。

    【讨论】:

    • 感谢您提供有用的说明。
    • 嗯.. 使用 .htaccess 指令关闭 magic_quotes_gpc 不起作用 - 不知道为什么。 phpinfo() 现在显示本地值关闭,但 db 插入仍会导致数据库中出现反斜杠。我不知道这是为什么,所以我想我必须在插入之前使用stripslashes()(尽管您不必多次使用它来重复撇号吗?)。
    • @John 嗯,奇怪。你能检查一下你是否在任何地方有任何addslashes() 电话吗?
    • 好吧,我已经禁用了magic_quotes_gpc,但数据库中的字符串在引号前仍然有斜杠。有人可以告诉我 - PDO 是否以任何方式添加这些?
    • @John 不,不应该。有没有像mysql_real_escape_string() 这样的其他卫生功能?里面有escape 的东西?
    猜你喜欢
    • 2015-10-08
    • 1970-01-01
    • 2021-05-20
    • 2016-07-07
    • 2010-09-24
    • 2022-01-09
    • 2010-09-21
    • 2010-09-21
    • 1970-01-01
    相关资源
    最近更新 更多