try { $DBH = new PDO("MysqL:host=$host;dbname=$dbname",$user,$pass); } catch(PDOException $e) { echo "Select DB Error: " .$e->getMessage(). "</br>"; }
不幸的是,我不断收到以下错误:
“sqlSTATE [42000] [1203]用户已经有超过’max_user_connections’活动连接”
基于一些在线研究,我尝试了各种不同的方法来解决这个问题.首先,我尝试在每个脚本的末尾将数据库连接设置为null(尽管这应该是PHP PDO的默认值).然后在数据库的每个查询之后,我尝试将每个语句句柄设置为null(这是一个无望的努力).最后,我尝试使用永久连接,通过更改我的配置文件中的以下行:
$DBH = new PDO("MysqL:host=$host;dbname=$dbname",$pass,array(PDO::ATTR_PERSISTENT => true));
没有一个这样似乎工作,我仍然得到相同的确切错误.该网站准备好后,每天可以处理100-200人,输入大量不同的数据.即使我可以弄清楚如何利用wordpress的活动连接使用PDO,这将是一个好的开始.我很乐意得到任何帮助.
更新:
我正在运行SHOW FULL PROCESSLIST作为我的一个代码中的MySQL查询,我变得非常奇怪的行为.这是我的脚本的第一部分(不包括SHOW FULL PROCESSLIST查询):
<?PHP include 'config.PHP'; if(isset($_POST['submit'])) { //Get Current User Login global $current_user; $current_user = wp_get_current_user(); $ulog = $current_user->user_login; $tablename_cc = "cc_".$ulog; $tablename_db = "db_".$ulog; $tablename_misc = "misc_".$ulog; $tablename_cash = "cash_".$ulog; try { $DBH->exec("CREATE TABLE IF NOT EXISTS " .$tablename_cc. " (ID bigint(100) NOT NULL AUTO_INCREMENT,PRIMARY KEY(ID),accnt TEXT(20),cc_num TEXT(4),cc_amnt DECIMAL(8,2),cc_app TEXT(20),cc_date VARCHAR(10),cc_time VARCHAR(10))"); $DBH->exec("CREATE TABLE IF NOT EXISTS " .$tablename_db. " (ID bigint(100) NOT NULL AUTO_INCREMENT,db_num TEXT(20),db_amnt DECIMAL(8,db_date VARCHAR(10),db_time VARCHAR(10))"); $DBH->exec("CREATE TABLE IF NOT EXISTS " .$tablename_misc. " (ID bigint(100) NOT NULL AUTO_INCREMENT,misc_item TEXT(1000),misc_amnt DECIMAL(8,misc_date VARCHAR(10),misc_time VARCHAR(10))"); $DBH->exec("CREATE TABLE IF NOT EXISTS " .$tablename_cash. " (ID bigint(100) NOT NULL AUTO_INCREMENT,cash_amnt DECIMAL(8,cash_time VARCHAR(10))"); } catch(PDOException $e) { echo "Create Tables Error: " .$e->getMessage(); } } ?>
如果我尝试在if语句之外运行SHOW PROCESS LIST查询,我得到一个结果,指出我有一个活动连接;但是,如果我尝试在if语句中运行SHOW FULL PROCESSLIST查询,我得到的错误超出了我的连接数.基于这个结果,我想我可能在页面顶部的include行可能会导致一个问题,当用户提交表单(基本上试图连接到数据库两次),所以我把它移动到if语句,但是也没有差别.我为什么会发生这样的事情呢?
更新/解答(还有一些问题):
我想出了我的问题.完成我的一个脚本后,有一个javascript命令弹出一个窗口,另一个脚本将打印出一张发票.该第二个脚本还尝试使用配置文件连接到数据库.用户正在使用的形式是动态的(他们可以根据需要放入尽可能少的数据集),因此当用户插入少量数据时,PDO查询执行得非常快,并且没有冲突连接数;然而,如果用户输入大量数据,那么它需要大量的时间,并且服务器达到最大连接数.这个问题真的在于我的服务器环境差和低效率的查询(仍然在学习PHP).在这一点上,我唯一可以想到的解决方案是在我的第二个脚本(已经使用3秒钟的睡眠)上睡眠较长,让另一个脚本赶上,但在某些时候,这只会花费太长时间.我不知道你们有什么更好的建议吗?