Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在函数中使用Mysqli_connect link作为全局变量是否安全?_Php_Mysql_Mysqli - Fatal编程技术网

Php 在函数中使用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

在函数中使用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_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并不是我的最佳解决方案,如果我遵循这一点,我必须更改使用此函数和类似函数的其余部分