php - 使用 "safe way to input data to mysql using PHP"插入数据的问题

标签 php mysql mysql-real-escape-string html-entities stripslashes

我正在尝试使用表单将数据输入 MySQL,并为此目的使用 mysql_real_escape_string。不幸的是我的输出有问题。它显示 \,或者如果我使用 stripslashes 然后它会删除所有斜线。

如果我使用反斜杠\ 提交 web 表单,我会得到以下输出:

"web\'s forms using backslash \\"

看到我有一个双反斜杠。但是,如果我使用 stripslashes 函数,它会删除所有斜杠,但也会删除输入的斜杠,输出为

"web's forms using backslash"

此处不显示反斜杠,但末尾应有一个反斜杠。

问题是,如果有人在密码字段和任何其他字段中使用反斜杠,那么反斜杠将被删除或显示两次。另外请告诉我什么最适合显示输出 htmlentities 或 htmlspecialchars

最佳答案

You have magic quotes turned on .您需要完全禁用它们,因为它们在安全方面并不好。

在 php.ini 中将它们设置为 off(首选):

; Magic quotes
;

; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = Off

; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
magic_quotes_runtime = Off

; Use Sybase-style magic quotes (escape ' with '' instead of \').
magic_quotes_sybase = Off

或者您可以在运行时禁用它们:

if (get_magic_quotes_gpc())
{
    $process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
    while (list($key, $val) = each($process))
    {
        foreach ($val as $k => $v)
        {
            unset($process[$key][$k]);
            if (is_array($v))
            {
                $process[$key][stripslashes($k)] = $v;
                $process[] = &$process[$key][stripslashes($k)];
            }
            else
            {
                $process[$key][stripslashes($k)] = stripslashes($v);
            }
        }
    }
    unset($process);
}

关于php - 使用 "safe way to input data to mysql using PHP"插入数据的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4710381/

相关文章:

php - 如何使用 CakePhp 克隆/复制一条 sql 记录?

mysql - 在MySQL中,如何获取只有数字类型列的表的子集?

mysql - Homebrew 软件,MySQL 8 支持

mysql - 数据库中许多实体的相同数据

php - 关于 html 页面中的 stripslash 如何在 php 页面中隐藏...

php - 你能在MYSQL语句中做if/else逻辑吗?

php - 使用 Symfony 路由从 .htaccess 重写 URL

php - mysql_real_escape_string() 完全删除字符串

php - PHP 变量是否应该在用作 OUT 函数参数之前进行初始化?

php - mysql_real_escape_string 未显示错误