以下函数是用于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");
}好吧..。我已经被我的专用服务器报告,类似于“使用单例,因为你正在向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");
}谢谢!
发布于 2012-02-27 03:17:13
请注意,这仍然会为每个请求打开一个连接。如果您的站点很受欢迎,并且服务器速度慢且配置错误,则可能会导致大量并发连接,并进一步阻塞数据库。在这种情况下,我只能建议更换服务器或主机)
当然,您的查询也可能很慢,这可能会导致MySQL中负载过重。如果你的网站真的很受欢迎。
发布于 2012-02-27 03:16:50
Singleton将仅持续单个访问者的单个HTTP请求的长度,然后将被清除-除非您进行某些缓存。因此,看起来您的连接垃圾邮件是按请求发送的。您需要的是这里讨论的某种连接池:Connection pooling in PHP。
发布于 2012-02-27 03:36:36
我从来没有听说过‘垃圾邮件mysql连接’。在有限的可用连接池中,您可能会使用大量的mysql连接。
在这种情况下,可能会有所帮助。
但是请read the manual regarding mysql_pconnect!文档中的这一提示并不是唯一的陷阱:
‘请注意,只有在使用PHP的模块版本时,这些类型的链接才有效。有关详细信息,请参阅持久数据库连接部分。’
和
‘持久连接被设计为具有到常规连接的一对一映射。这意味着你应该始终能够来用非持久连接替换持久连接,并且它不会改变你的脚本的行为方式。它可能(可能会)改变脚本的效率,但不会改变它的行为!’
如果使用不当,“垃圾邮件”问题就会变得更加严重……
https://stackoverflow.com/questions/9456191
复制相似问题