-1

我正在练习 php,我在解释一个函数以逃避危险的 sql 字符时感到困惑。我想知道它是如何工作的,尤其是第二个 if 中的 $value。让我理解实际的功能流程让我很困惑。

function quote_smart($value, $handle) {

   if (get_magic_quotes_gpc()) {
       $value = stripslashes($value);
   }

   if (!is_numeric($value)) {
       $value = "'" . mysql_real_escape_string($value, $handle) . "'";
   }
   return $value;
}
4

2 回答 2

1

代码的作用基本上是;

  • 首先,当且仅当它在服务器中启用时,它才会消除magic_quotes_gpc的影响。它不应该是因为 magic_quotes 已经被弃用了一段时间(并在新的 PHP 版本中完全删除)。

  • 其次,它将所有非数字值$value括在单引号中,并使用转义值mysql_real_escape_string以避免值字符串中的 SQL 注入。

使用最新版本的 PHP,此方法根本不应该存在,因为magic_quotes_gpc永远不应该启用,并且您将使用不需要转义其值的参数化查询PDOMySQLi

于 2013-07-19T08:21:05.763 回答
0

此函数不会“转义危险的 sql 字符”。它确实格式化$value为正确的 mySQL 文字。但是做错了吗,

  • 因为它处理了get_magic_quotes_gpc()它不应该处理的问题。
  • 它有一些魔力,试图格式化数字或字符串
  • 它旨在格式化直接插入查询的值,而不是通过占位符。

必须是正确的版本

function quote_string($value, $handle)
{
    return = "'" . mysql_real_escape_string($value, $handle) . "'";
}

它应该只用于处理占位符

虽然必须在引导文件中处理魔术引号,但对于所有输入值,不仅是进入查询的值,尽管仅出于兼容性目的。

于 2013-07-19T08:13:53.330 回答