首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP»单例MySQL连接

问PHP»单例MySQL连接
EN

Stack Overflow用户
提问于 2012-02-27 03:08:00
回答 3查看 3.3K关注 0票数 2

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

代码语言:javascript
复制
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");
}

好吧..。我已经被我的专用服务器报告,类似于“使用单例,因为你正在向mysql连接发送垃圾邮件”,所以我为MySQL编写了一个单例类,但是垃圾邮件仍然存在。

代码语言:javascript
复制
<?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;
        }
    }
?>

这个函数..。

代码语言:javascript
复制
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");
}

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-27 03:17:13

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

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

票数 1
EN

Stack Overflow用户

发布于 2012-02-27 03:16:50

Singleton将仅持续单个访问者的单个HTTP请求的长度,然后将被清除-除非您进行某些缓存。因此,看起来您的连接垃圾邮件是按请求发送的。您需要的是这里讨论的某种连接池:Connection pooling in PHP。

票数 1
EN

Stack Overflow用户

发布于 2012-02-27 03:36:36

我从来没有听说过‘垃圾邮件mysql连接’。在有限的可用连接池中,您可能会使用大量的mysql连接。

在这种情况下,可能会有所帮助。

但是请read the manual regarding mysql_pconnect!文档中的这一提示并不是唯一的陷阱:

‘请注意,只有在使用PHP的模块版本时,这些类型的链接才有效。有关详细信息,请参阅持久数据库连接部分。’

和

‘持久连接被设计为具有到常规连接的一对一映射。这意味着你应该始终能够来用非持久连接替换持久连接,并且它不会改变你的脚本的行为方式。它可能(可能会)改变脚本的效率,但不会改变它的行为!’

如果使用不当,“垃圾邮件”问题就会变得更加严重……

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9456191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档