PHP全局变量在sanitise字符串函数中的使用
这是一个快速的 我目前正在学习全局/静态/局部PHP变量的使用,并希望澄清在该函数中使用“全局”变量是否正确: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 =
$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>的人愿意评论吗?