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是什么,哪些值是用户输入,哪些不是