PHP全局变量在sanitise字符串函数中的使用

PHP全局变量在sanitise字符串函数中的使用,php,mysqli,Php,Mysqli,这是一个快速的 我目前正在学习全局/静态/局部PHP变量的使用,并希望澄清在该函数中使用“全局”变量是否正确: $mysqli = new mysqli($DBServer, $DBUser, $DBPass, $DBName); function sanitise($var) { global $mysqli; $var = strip_tags($var); $var = htmlentities($var, ENT_NOQUOTES); $var =

这是一个快速的

我目前正在学习全局/静态/局部PHP变量的使用,并希望澄清在该函数中使用“全局”变量是否正确:

$mysqli = new mysqli($DBServer, $DBUser, $DBPass, $DBName);

function sanitise($var) {

    global $mysqli;

    $var = strip_tags($var);
    $var = htmlentities($var, ENT_NOQUOTES);
    $var = stripslashes($var);
    return $mysqli->real_escape_string($var);
}
该函数将在许多PHP文件中使用


非常感谢

以这种方式使用globals不是最佳做法,但它的语法是正确的

更好的方法是将mysqli作为参数传入:

$mysqli = new mysqli([..]);

function my_cool_function($mysqli, $var) {
  //do work
  return;
}

echo my_cool_function($mysqli, $var);

应避免使用全局变量。从长远来看,他们使得维护软件变得非常困难。另外,我想知道为什么变量应用了
strip\u tags()
htmlentities()
stripslashes()
。不应该这样做!如果你有理由这么做,你可能还没有正确理解这个问题。用法是正确的。只要$mysqli变量在调用
sanitise
函数之前已初始化。不过,最好通过将$mysqli作为参数传递给sanitise函数来消除对GLOBALS的需求。必须严格避免使用“sanitize string”函数。虽然这些全球性的东西并不重要是的,嗯<代码>带标签不能正确地仅过滤HTML标签。之后,任何特殊字符都会转换为实体,因此您无法使用数据库对这些字符串进行正确排序,并且输出只能用作HTML。然后,即使斜线不在那里,也会被删除。结果是一团乱麻,但如果应用于一组无辜的字符串,它可能看起来很有希望。如果要消毒任何东西,一定要说明目的。没有可用的通用消毒功能。您也可以使用
$var=”“
来代替这种消毒。这里使用的各种功能如下:(1)现在PHP中完全不需要使用
stripslashes()
;它的作用与
real\u escape\u string()
相同,但不尽相同。(2) 我怀疑在这里调用
htmlentities()
是否明智;输出字符串时应该调用它,而不是保存字符串时。(3)
strip\u tags()
是的,这很好,不过我还是认为DB层不是合适的位置。最后,正如其他人所说的,你真的应该考虑使用MySQL的“PARAMTELIST查询”特性而不是转义字符串。做过<代码> -1 < /Cord>的人愿意评论吗?