将mysql转换为mysqli - 如何获取超全局连接对象?

Ric*_*ard 4 php mysql mysqli

我试图将代码从mysql转换为mysqli.该代码在一个文件中使用单个mysql_connect,该文件包含在每个其他文件中.

mysql_connect返回一个超级全局的MySQL链接标识符,因此您可以依赖于任何自己的函数中的数据库连接.

看起来像mysqli_connect不是这种情况,返回的对象不是全局的.

这是否意味着我必须添加:global $ mysqli; 在每个功能的顶部,还是有办法使它成为超全球?

meo*_*ouw 5

如果你没有指定,那么依赖PHP将使用最后打开的连接资源的事实可能不是一个好主意.
如果您的应用程序发生更改并且您需要两个连接,或者连接不存在,会发生什么?
因此,无论如何,您似乎需要进行一些重构.

这是一个类似于Karsten的解决方案,它总是返回相同的mysqli对象.

class DB {
    private static $mysqli;
    private function __construct(){} //no instantiation

    static function cxn() {
        if( !self::$mysqli ) {
            self::$mysqli = new mysqli(...);
        }
        return self::$mysqli;
    }
}        

//use
DB::cxn()->prepare(....
Run Code Online (Sandbox Code Playgroud)

  • 我不同意这不是一个好主意。我敢打赌 95% 的 PHP 应用程序只使用一个数据库。如果您的应用程序突然成为剩余的 5% 之一,那么从一开始就在很多代码中*极不可能*需要使用您必须使用的新数据库。 (2认同)