PHP改为mysqli.mysqli_connection不是全局的吗?

Sun*_*ood 6 php mysql mysqli function

我刚刚开始一个新的PHP项目,我认为是时候关注php建议并停止使用mysql和swith来代替mysqli.但这给了我一个问题.

Normaly我的设置是这样的

Index.php文件和这个文件里面我有2个require语句.一个调用db.php文件,另一个调用functions.php文件.到现在为止还挺好.

在functions.php文件中,有很多不同的函数在整个主页上使用,其中很多都使用SQL.使用php旧的mysql API这没有问题,但它接缝新的mysqli api不允许从包含文件中使用连接???

例如在我的db.php中我有connect语句.$db = mysql_connect(*******); 在我的function.php中我有mysql_query(******)它并且它完美无缺.

但是,如果我$db = mysqli_connect(*****); 在我的function.php文件中将db.php更改为Then,我就无法调用mysqli_query(***).(我也测试了面向对象,但它给了我同样的问题).

那么如何解决这个问题呢?php是否希望我将mysqli_connect语句放在每个使用sql语句的文件的开头?

dec*_*eze 8

是的,MySQLi是面向对象的,你需要将$db对象传递给需要数据库连接的函数.程序替代方案也要求$db对象起作用.这是为了你自己的利益,因为隐含的全球联系(实际上:任何形式的全球状态)都是不好的做法.mysql扩展允许隐式连接并不好开始.


ric*_*ane 7

这是一个选项 - 创建一个静态类纯粹将mysqli对象保存为公共静态变量:

class DBi {
    public static $conn;
}
DBi::$conn = new mysqli(HOST, USER, PASS, DB);
Run Code Online (Sandbox Code Playgroud)

...在包含文件,数据库助手等等.

然后你想做一个mysqli电话的任何地方

DBi::$conn->query(...) 
Run Code Online (Sandbox Code Playgroud)

使其成为您想要的全球化.如果你觉得有需要,你可以轻松地开始在那里弹出你自己的自定义函数(方法) - DBi :: custom_method()

这是对将mysql转换为mysqli时给出的答案的一种改进- 如何获得超全局连接对象?


Iva*_*van 5

如果您在函数中需要它,您需要将 $mysqli 变量设置为全局变量。

像这样的东西:

...
function name (){  
        global $mysqli; 

...
Run Code Online (Sandbox Code Playgroud)