我的情况很奇怪,在我的服务器中,当我使用 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);
}
使用此代码,您可以检查该选项是否处于活动状态并执行第一次剥离。