Php 在函数中使用Mysqli_connect link作为全局变量是否安全?
在函数中使用Mysqli_connect link作为全局变量是否安全,如下面的示例所示?用这种方法我可能会遇到什么问题Php 在函数中使用Mysqli_connect link作为全局变量是否安全?,php,mysql,mysqli,Php,Mysql,Mysqli,在函数中使用Mysqli_connect link作为全局变量是否安全,如下面的示例所示?用这种方法我可能会遇到什么问题 function dbconnect(){ $link = mysqli_connect($db['host'], $db['user'], $db['pass']); mysqli_select_db($link, $db['db']); return $link; } function something_query($sql){ return mysqli_qu
function dbconnect(){
$link = mysqli_connect($db['host'], $db['user'], $db['pass']);
mysqli_select_db($link, $db['db']);
return $link;
}
function something_query($sql){
return mysqli_query($GLOBALS['conn'], $sql);
}
$conn = dbconnect();
$newsql = 'select * from table where 1';
something_query($newsql);
编辑1:$conn是整个代码中唯一的字符串,在查询中不作为参数使用是的,它另存为,不存在安全风险
但这不是最好的设计。依赖项注入通常比全局变量更受欢迎,因为它使您有机会只测试代码的一小部分,并模拟测试不需要的其余部分,并且它增加了代码的可重用性—您可以只使用一个类/函数,并在不同的项目中使用它,无需阅读所有代码并检查global中需要存在哪些值。是的,如果您遵守“注射安全规则”,则是安全的。可以找到一些相关帖子。请您解释清楚,我不在mysqli_query中使用$conn查询注入是如何发生的?您有什么建议来提高此结构的安全性或可重用性吗?关于安全性,没有什么好说的。通常不建议在web根目录中的PHP文件中存储凭据,但是不清楚你的脚本在哪里,所以我没有在我的回答中评论它。将连接存储在GLOBALS中很好,我假设您使用准备好的语句进行查询。对于可重用性,只需将连接传递到函数中:something\u query$connection,$sqlthankyou,这非常有用,但是something\u query$connection,$sql并不是我的最佳解决方案,如果我遵循这一点,我必须更改使用此函数和类似函数的其余部分