实现快捷方式替换mysqli_real_escape_string()

时间:2011-10-05 11:04:00

标签: php mysqli

我想实现一个快捷功能,以替换将包含在我的主脚本中的单独脚本中常用的mysqli_real_escape_string()

 $cxn = mysqli_connect($hostname, $username, $password, $databasename) 
  or die ("Couldn't connect to server.");

 function m($str) {return "'".mysqli_real_escape_string($cxn, $str)."'";}

主脚本包含foreach,它将循环遍历数组,如下所示:

 foreach($ARRAY as $field => $value)
 {
  $fields[] = $field;
  $value = strip_tags(trim($value));
  $values[] = m($value); // function m() is implemented here
 }

检查SQL语句后,我发现所有插入的值都是空的。我知道如果没有打开连接,mysqli_real_escape_string()将返回一个空字符串,所以这可能是问题所在。但是,如果我要替换以下行

$values[] = m($value);

有了这个,

$values[] = "'".mysqli_real_escape_string($cxn, $value)."'";

返回所有正确的值。那么,导致我的捷径函数m()失败的原因是什么?

2 个答案:

答案 0 :(得分:2)

$cxn = mysqli_connect();
function e($string)
{
    global $cxn;
    return mysqli_real_escape_string($string, $cxn);
}

答案 1 :(得分:1)

原因就像变量范围一样简单。

所以,如果此功能将成为班级成员,只需将$cxn更改为$this->cxn;
否则这个函数根本没有意义:同意使用占位符比手动调用转义函数更好。

另外,我很好奇,你为什么不对$ fields做点什么?