MySQL 从数据库选择内容时自动删除斜杠


mysql auto stripslashes when select contents from db?

我的情况很奇怪,在我的服务器中,当我使用 mysql_real_escape_string 将字符串插入数据库然后打印它时,一切都很好,看起来像 MySQL 自动剥离斜杠! 例如,我保存tes't然后打印它: tes't但是在安装了 PHP 4.2 的本地主机中,我使用相同的代码给出了tes''t。 MySQL的奥秘是什么? 想知道如何将数据插入和选择到数据库安全和干净,永远一次!因为这让我真的很困惑!

您可能打开了魔术引号。与其试图解决这个问题,不如将其关闭。如果您无权访问服务器,您仍应以全局方式处理它。例如:

if ( ( function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc() ) || ini_get('magic_quotes_sybase') ) {
    foreach ( $_POST as $k => $v ) { $_POST[$k] = stripslashes($v); }
    foreach ( $_GET as $k => $v ) { $_GET[$k] = stripslashes($v); }
    foreach ( $_COOKIE as $k => $v ) { $_COOKIE[$k] = stripslashes($v); }
}

将其放在代码的开头可以确保每次都处理魔术引号,这意味着您不必跟踪必须处理魔术引号的位置。

此处注释中的更多信息:http://www.php.net/manual/en/function.get-magic-quotes-gpc.php

这可能

取决于PHP的魔术引号设置,与其说是MySQL之谜,不如说是PHP之谜:)您可以使用更通用的函数,而不是使用 mysql_real_escape_string()

function escape($s)
{
    if (get_magic_quotes_gpc()) $s=stripslashes($s);
    return mysql_real_escape_string($s);
}

使用此代码,您可以检查该选项是否处于活动状态并执行第一次剥离。