PHP » 单例 MySQL 连接

标签 php mysql singleton

以下函数是MySQL连接的旧方法

function dbconn($autoclean = false, $mysql_close = false)
{
    global $mysql_host, $mysql_user, $mysql_pass, $mysql_db;
    mysql_connect($mysql_host, $mysql_user, $mysql_pass);
    mysql_select_db($mysql_db);

    userlogin();

    if ($autoclean)
        register_shutdown_function("autoclean");

    if ($mysql_close)
        register_shutdown_function("mysql_close");
}

好吧...我的专用服务器报告了类似“使用 Singleton 因为你正在向 mysql 连接发送垃圾邮件”之类的信息,因此我为 MySQL 编写了一个单例类,但垃圾邮件仍然存在。

<?php
    class mysql {
        private static $instance;
        private $res;
        private function __construct() 
        {
            $this->res = mysql_connect('localhost','user','password');
            mysql_select_db('database', $this->res);
        }
        public static function getinstance() {
            if(!isset(self::$instance)) {
                $c = __CLASS__;
                self::$instance = new $c;
            }
            return self::$instance;
        }
        public function getres() {
            return $this->res;
        }
    }
?>

以及函数...

function dbconn($autoclean = false, $mysql_close = false, $file = '')
{
    require_once("MySQL.php");
    $m = mysql::getinstance();
    $m->getres();

    userlogin();

    if ($autoclean)
        register_shutdown_function("autoclean");

    //if ($mysql_close)
    //  register_shutdown_function("mysql_close");
}

谢谢!

最佳答案

请注意,这仍然会为每个请求打开一个连接。如果您的网站很受欢迎,但服务器速度缓慢且配置错误,则可能会导致大量并发连接并进一步阻塞数据库。在这种情况下,我只能建议更换服务器或主机)

当然,您的查询也可能很慢,这可能会导致 MySQL 负载过重。如果您的网站确实很受欢迎。

关于PHP » 单例 MySQL 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9456191/

相关文章:

php - 在 pdf 文档中插入手动分页符 - PHP

php - 变量是否通过 PHP 从一个单独的脚本转移到另一个脚本?

mysql - MS Access 查询计算字段

mysql - 我们如何使用 Sequelize 执行以下原始查询?

dependency-injection - 依赖注入(inject)和/vs 全局单例

actionscript-3 - 管理外部 swf 中的单例

php - Eloquent - Where Date >= date(now) and whereNull ('date' )

javascript - 如何在 Chase Paymentech 的 Hosted Payment Form 中使用响应函数?

mysql - 选择具有不同值的行

c++ - 为什么在单例实现中清除 boost::scoped_ptr