Php 实现一个快捷函数来替换mysqli_real_escape_string()

Php 实现一个快捷函数来替换mysqli_real_escape_string(),php,mysqli,Php,Mysqli,我想实现一个快捷函数来替换常用的mysqli\u real\u escape\u string(),如下所示,在一个单独的脚本中,该脚本将包含在我的主脚本中: $cxn = mysqli_connect($hostname, $username, $password, $databasename) or die ("Couldn't connect to server."); function m($str) {return "'".mysqli_real_escape_string

我想实现一个快捷函数来替换常用的
mysqli\u real\u escape\u 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\u real\u escape\u string()
将返回一个空字符串,因此这可能是问题所在。但是,如果我要替换以下行

$values[] = m($value);
有了这个,

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

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

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

$cxn = mysqli_connect();
function e($string)
{
    global $cxn;
    return mysqli_real_escape_string($string, $cxn);
}
因此,如果此函数将成为类成员,只需将
$cxn
更改为
$this->cxn

否则这个函数就毫无意义了:大家都同意使用占位符比手动调用转义函数要好


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

原因很简单,就像变量作用域一样

因此,如果此函数将成为类成员,只需将
$cxn
更改为
$this->cxn

否则这个函数就毫无意义了:大家都同意使用占位符比手动调用转义函数要好



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

$GLOBALS['cxn']
会更好
$GLOBALS['cxn']
会更好因为作用域而失败-函数
m()
无法访问全局变量
$cxn
-您必须从全局范围
$GLBOALS['cxn']
中引用它,或者将其作为参数传入。。。就我个人而言,我会把所有的东西都封装在一个对象的头脑中。你试过array_walk_recursive()吗?我最近才意识到array_walk和array_map之类的函数,并没有真正详细研究它们。我理解您的意思,我将在稍后阶段改进我的代码。谢谢:)它因为作用域而失败-函数
m()
无法访问全局变量
$cxn
-您必须从全局作用域
$GLBOALS['cxn']
引用它,或者将其作为参数传入。。。就我个人而言,我会把所有的东西都封装在一个对象的头脑中。你试过array_walk_recursive()吗?我最近才意识到array_walk和array_map之类的函数,并没有真正详细研究它们。我理解您的意思,我将在稍后阶段改进我的代码。谢谢:)我的PHP脚本没有使用OOP。使用占位符是什么意思?字段不是用户输入,所以我认为没有必要转义。有安全问题吗?总是有安全问题。即使你认为没有,你能给我举个例子吗?我有兴趣了解更多:)其中一些可以是mysql关键字,如果你想要一个例子,我还想知道$ARRAY是什么,哪些值是用户输入,哪些键不是我的PHP脚本没有使用OOP。使用占位符是什么意思?字段不是用户输入,所以我认为没有必要转义。有安全问题吗?总是有安全问题。即使你认为没有,你能给我举个例子吗?我很想知道更多:)其中一些可以是mysql关键字,如果你想要一个例子,我还想知道$ARRAY是什么,哪些值是用户输入,哪些不是