我正在练习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;
}
答案 0 :(得分:1)
代码的作用基本上是什么;
首先,当且仅当在服务器中启用magic_quotes_gpc时,它才会删除{{3}}的效果。它不应该是因为magic_quotes已经被弃用了一段时间(并且完全在新的PHP版本中删除)。
其次,它将$value
的所有非数字值括在单引号中,并使用mysql_real_escape_string
转义该值以避免在值字符串中使用SQL注入。
使用最新版本的PHP,此方法根本不存在,因为永远不应启用magic_quotes_gpc
,并且您将使用不PDO
或MySQLi
参数化查询需要逃避他们的价值观。
答案 1 :(得分:0)
此功能不会“逃避危险的sql字符”。它将$value
格式化为正确的mySQL文字。但它错了,
get_magic_quotes_gpc()
而不应该处理function quote_string($value, $handle)
{
return = "'" . mysql_real_escape_string($value, $handle) . "'";
}
。 正确的版本必须是
{{1}}
并且它应该仅用于处理占位符。
虽然必须在引导程序文件中处理魔术引号,但对于所有输入值,不仅仅是进入查询的引号,但仅出于兼容性目的。