Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.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 在多个函数(OO)上使用MySQLi连接_Php_Mysql_Mysqli - Fatal编程技术网

Php 在多个函数(OO)上使用MySQLi连接

Php 在多个函数(OO)上使用MySQLi连接,php,mysql,mysqli,Php,Mysql,Mysqli,从mysql切换到mysqli,我先创建一个连接,然后在几个函数中使用它,并在脚本结束时关闭它(我不是专家:) 然而,我注意到现在,这在mysqli中已经不可能了。我有: $db = new mysqli('localhost', 'username', 'password', 'database'); if($db->connect_errno > 0){ die('Unable to connect to database [' . $db->connect_err

从mysql切换到mysqli,我先创建一个连接,然后在几个函数中使用它,并在脚本结束时关闭它(我不是专家:)

然而,我注意到现在,这在mysqli中已经不可能了。我有:

$db = new mysqli('localhost', 'username', 'password', 'database');

if($db->connect_errno > 0){
   die('Unable to connect to database [' . $db->connect_error . ']');
}

$db->set_charset("utf8");
然后,需要使用该连接的几个函数

function x(){
    $db->query(....);
}
我在执行此操作时出错,因为$db不是函数中的对象

我做了一点调查并添加了

global $db; 
在调用内部查询之前,每个函数都解决了这个问题。但是考虑到我有数百个函数,我是否需要在每个函数的开头添加它们?难道没有其他方法可以将该连接设置为对所有函数公开可用吗


我发现mysqli比mysql复杂一点,也许我只是习惯了,但即使使用过程,你也需要传递mysql不需要的额外参数,或者我遗漏了什么?

你应该阅读依赖注入。使用全局语句是非常糟糕的编码实践。这并不能使您免于修改函数,但它将为您提供一个更加不脆弱的代码库,我同意@MikeBrant。基本上,这是你的解决方案<代码>函数x(mysqli$db){$db->query(…);}所以基本上我要么将连接对象作为参数传递给函数,要么创建一个类来查询数据库,并在每次需要查询时调用它,对吗?