最近做一个活动是基于微信端的,需获取微信信息(openid、昵称、头像),是以抢奖品的形式做的,每次参与的人数在2000人左右。每次都会出现一个问题,每次参与活动的人数一多就出现数据库连接不上的情况,我自己在服务器上本地连接数据库都连不上,查看服务器CPU、内存使用情况都不是很高
首页的逻辑代码如下:
include_once 'config/common.php'; // 提示信息
include_once 'config/weixin.php'; // 微信接口
include_once 'config/databases.php'; // 数据库
// 实例化微信操作
$wx = Wxin::getInstance();
// 只能在微信内置浏览器中打开
if(!$wx->is_weixin()){
hint("请在微信中打开该页面");
exit;
}
// 实例数据库操作
$mysql = Mysql::getInstance();
// 微信
$code = isset($_REQUEST['code']) ? $_REQUEST['code'] : 0;
$state = isset($_REQUEST['state']) ? $_REQUEST['state'] : 0;
$id = '';
// 判断是否需要获取用户信息
if($code != 0){
$list = $wx->getOpenid($code);
if($list->openid){
$week = date("W",time());
$sql = "select id from commune_user where openid='{$list->openid}' and week=".$week;
$val = $mysql->getRow($sql);
if(empty($val)){
$value = $wx->getInfor($list->access_token,$list->openid);
$nickname = base64_encode($value['nickname']);
$sql = "insert into commune_user(openid,nickName,headImg,week) values('".$value['openid']."','".$nickname."','".$value['headimgurl']."',{$week})";
$id = $mysql->insert($sql);
}else{
$id = $val['id'];
}
$_SESSION['openid'] = $list->openid;
}else{
$url = $wx->skip('http://www.95omno.com/CYZY/commune/index.php');
header("location:$url");
exit;
}
}
// 如果session不存在则需要重新获取用户信息
if($_SESSION['openid'] == ''){
$url = $wx->skip('http://www.95omno.com/CYZY/commune/index.php');
header("location:$url");
exit;
}
// 判断用户ID
if($id == ''){
$week = date("W",time());
$sql = "select id from commune_user where openid='".$_SESSION['openid']."' and week=".$week;
$temp = $mysql->getRow($sql);
if(empty($temp)){
$url = $wx->skip('http://www.95omno.com/CYZY/commune/index.php');
header("location:$url");
exit;
}else{
$id = $temp['id'];
}
}
数据库连接的代码如下:
class Mysql{
//保存类实例的静态成员变量
private static $_instance;
// ip地址
private static $_host = '127.0.0.1:3306';
// 用户名
private static $_user = '';
// 密码
private static $_pwd = ‘';
// 数据库名称
private static $_name = '';
/**
* 私有的构造方法,防止被直接实例化ss
*/
private function __construct(){}
/**
* 单例方法,用于访问实例的公共的静态方法
*/
public static function getInstance(){
if(!(self::$_instance instanceof self)){
self::$_instance = new self();
}
return self::$_instance;
}
/**
* 创建__clone方法防止对象被复制克隆
*/
public function __clone(){}
/**
* 数据库连接
*/
private function link(){
$connectLink = mysql_connect(self::$_host,self::$_user,self::$_pwd) or die("<div style='width:80%;margin-left:10%;font-weight:bold;margin-top:100px;text-align:center;'><br/>如长时间无反应,请退出重新进入!</div>");
mysql_select_db(self::$_name,$connectLink) or die("<div style='width:80%;margin-left:10%;font-weight:bold;margin-top:100px;text-align:center;'>br/>如长时间无反应,请退出重新进入!</div>");
mysql_query("set names utf8",$connectLink);
return $connectLink;
}
/**
* 执行SQL语句
*/
public function getInfo($sql){
$connectLink = $this->link();
$val = mysql_query($sql);
$lists = array();
while($row = mysql_fetch_assoc($val)){
$lists[] = $row;
}
mysql_free_result($val);
mysql_close($connectLink);
return $lists;
}
/**
* 获取一行信息
*/
public function getRow($sql){
$connectLink = $this->link();
$val = mysql_query($sql);
$row = mysql_fetch_assoc($val);
mysql_free_result($val);
mysql_close($connectLink);
return $row;
}
/**
* 执行插入信息SQL
*/
public function insert($sql){
$connectLink = $this->link();
$is = mysql_query($sql);
$id = mysql_insert_id();
mysql_close($connectLink);
if($is){
return $id;
}else{
return false;
}
}
/**
* 执行SQL语句
*/
public function query($sql){
$connectLink = $this->link();
$is = mysql_query($sql);
mysql_close($connectLink);
return $is;
}
}
请大神帮忙看下是什么原因?
首页的逻辑代码如下:
include_once 'config/common.php'; // 提示信息
include_once 'config/weixin.php'; // 微信接口
include_once 'config/databases.php'; // 数据库
// 实例化微信操作
$wx = Wxin::getInstance();
// 只能在微信内置浏览器中打开
if(!$wx->is_weixin()){
hint("请在微信中打开该页面");
exit;
}
// 实例数据库操作
$mysql = Mysql::getInstance();
// 微信
$code = isset($_REQUEST['code']) ? $_REQUEST['code'] : 0;
$state = isset($_REQUEST['state']) ? $_REQUEST['state'] : 0;
$id = '';
// 判断是否需要获取用户信息
if($code != 0){
$list = $wx->getOpenid($code);
if($list->openid){
$week = date("W",time());
$sql = "select id from commune_user where openid='{$list->openid}' and week=".$week;
$val = $mysql->getRow($sql);
if(empty($val)){
$value = $wx->getInfor($list->access_token,$list->openid);
$nickname = base64_encode($value['nickname']);
$sql = "insert into commune_user(openid,nickName,headImg,week) values('".$value['openid']."','".$nickname."','".$value['headimgurl']."',{$week})";
$id = $mysql->insert($sql);
}else{
$id = $val['id'];
}
$_SESSION['openid'] = $list->openid;
}else{
$url = $wx->skip('http://www.95omno.com/CYZY/commune/index.php');
header("location:$url");
exit;
}
}
// 如果session不存在则需要重新获取用户信息
if($_SESSION['openid'] == ''){
$url = $wx->skip('http://www.95omno.com/CYZY/commune/index.php');
header("location:$url");
exit;
}
// 判断用户ID
if($id == ''){
$week = date("W",time());
$sql = "select id from commune_user where openid='".$_SESSION['openid']."' and week=".$week;
$temp = $mysql->getRow($sql);
if(empty($temp)){
$url = $wx->skip('http://www.95omno.com/CYZY/commune/index.php');
header("location:$url");
exit;
}else{
$id = $temp['id'];
}
}
数据库连接的代码如下:
class Mysql{
//保存类实例的静态成员变量
private static $_instance;
// ip地址
private static $_host = '127.0.0.1:3306';
// 用户名
private static $_user = '';
// 密码
private static $_pwd = ‘';
// 数据库名称
private static $_name = '';
/**
* 私有的构造方法,防止被直接实例化ss
*/
private function __construct(){}
/**
* 单例方法,用于访问实例的公共的静态方法
*/
public static function getInstance(){
if(!(self::$_instance instanceof self)){
self::$_instance = new self();
}
return self::$_instance;
}
/**
* 创建__clone方法防止对象被复制克隆
*/
public function __clone(){}
/**
* 数据库连接
*/
private function link(){
$connectLink = mysql_connect(self::$_host,self::$_user,self::$_pwd) or die("<div style='width:80%;margin-left:10%;font-weight:bold;margin-top:100px;text-align:center;'><br/>如长时间无反应,请退出重新进入!</div>");
mysql_select_db(self::$_name,$connectLink) or die("<div style='width:80%;margin-left:10%;font-weight:bold;margin-top:100px;text-align:center;'>br/>如长时间无反应,请退出重新进入!</div>");
mysql_query("set names utf8",$connectLink);
return $connectLink;
}
/**
* 执行SQL语句
*/
public function getInfo($sql){
$connectLink = $this->link();
$val = mysql_query($sql);
$lists = array();
while($row = mysql_fetch_assoc($val)){
$lists[] = $row;
}
mysql_free_result($val);
mysql_close($connectLink);
return $lists;
}
/**
* 获取一行信息
*/
public function getRow($sql){
$connectLink = $this->link();
$val = mysql_query($sql);
$row = mysql_fetch_assoc($val);
mysql_free_result($val);
mysql_close($connectLink);
return $row;
}
/**
* 执行插入信息SQL
*/
public function insert($sql){
$connectLink = $this->link();
$is = mysql_query($sql);
$id = mysql_insert_id();
mysql_close($connectLink);
if($is){
return $id;
}else{
return false;
}
}
/**
* 执行SQL语句
*/
public function query($sql){
$connectLink = $this->link();
$is = mysql_query($sql);
mysql_close($connectLink);
return $is;
}
}
请大神帮忙看下是什么原因?
解决方案 »
- 加入下面PHP代码后apache启动不了,报操作失败,请求帮忙!
- xajax 内存占用高的解决方法
- 在windows下安装AppServ 2.5.10 问题发表于 : 2010-05-12 12:41
- 如何在joomla中添加新模板
- php 使用gettext实现国际化问题! 用过的进来讨论一下撒~~
- 关于discuz! 插件的sql 安全问题,求科普
- PHP菜鸟 怎么提高开发的水平呢 平时要上夜大没多少时间
- 广州程序员QQ群 4305109 新建
- thinkphp 3.2 多表查询
- 哪位高手帮我解答一下,万分感谢!
- phpcms v9做了一个中文网站
- 已知wsdl如何php搭建webservice
看配置文件中 max_connections 的值 ,若是没有,默认好像是 200,可适当调大
2、你在每次查询之后都关闭 mysql 连接,这是不妥当的
程序中有多次查询,每次都重新连接的话可能会使工作中途夭折
不在中途关闭连接,至少可以使已经连上的可以连续工作