我想实现一个快捷功能,以替换将包含在我的主脚本中的单独脚本中常用的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()
失败的原因是什么?
答案 0 :(得分:2)
$cxn = mysqli_connect();
function e($string)
{
global $cxn;
return mysqli_real_escape_string($string, $cxn);
}
答案 1 :(得分:1)
原因就像变量范围一样简单。
所以,如果此功能将成为班级成员,只需将$cxn
更改为$this->cxn
;
否则这个函数根本没有意义:同意使用占位符比手动调用转义函数更好。
另外,我很好奇,你为什么不对$ fields做点什么?