我已经为这个错误困扰了好几天,而我找不到解决它的方法。我尝试实施单例数据库对象查询后关闭我的连接尝试持久连接将最大连接数设置为250(本地)设置最大用户连接数250(在本地)这件事发生在别人身上吗?奇怪的是我的本地服务器上的错误消息是Connection failed: SQLSTATE[08004] [1040],但是行仍然是插入的,并且数据库查询仍然有效。在生产服务器上,错误消息变为Connection failed: SQLSTATE[42000] [1203] User db_admin already has more than 'max_user_connections' active connections,我知道最大连接数设置为15,但是我已经咨询了支持人员,他们说在发生此错误时我没有连接。经过所有选择之后,有人可以检查我的代码以确保其中没有错误会导致这些错误吗?class MyPDO extends PDO{ const DB_HOST='localhost'; const DB_PORT='3306'; const DB_NAME='db_name'; const DB_USER='db_admin'; const DB_PASS='SECRET'; public function __construct(){ parent::__construct('mysql:host='.MyPDO::DB_HOST.';port='.MyPDO::DB_PORT.';dbname='.MyPDO::DB_NAME, MyPDO::DB_USER,MyPDO::DB_PASS); try{ $this->db = new MyPDO(); $this->db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ); }catch(PDOException $e){ //always catching the connection errors echo 'Connection failed: ' . $e->getMessage(); } } public function query($query){ $args = func_get_args(); array_shift($args); //check inputs var_dump($args); $reponse = parent::prepare($query); $reponse->execute($args); return $reponse; }}这是插入查询function InsertUserToSql() { $ret = $this->db->query("INSERT INTO CD_USERS (email,username,password,fname,lname,dob,gender) VALUES (?,?,?,?,?,?,?)",$this->Email,$this->Username,$this->Password,$this->Fname, $this->Lname,$this->Birthday,$this->Gender); if($ret){ echo "insert success"; return $this->db->lastInsertId(); } $this->db = null; } 最佳答案 实际上,不要扩展PDO,不要扩展您不拥有的对象。扩展PDO对于最终会使用您的代码的人来说很烦人,这是毫无意义的(您要做什么?在清晰且众所周知的PDO API上进行改进?或者创建一个更适合您当前需求的对象-这意味着:创建一个您将无法再次使用的对象,这违背了OOP的观点)? I've been over quite a few reasons why you shouldn't extend from PDO here,可能值得一看。该,你的实际问题:不要在自己的构造函数中创建类的新实例!在MyPDO构造函数中创建新的MyPDO将再次调用MyPDO构造函数,这将创建MyPDO的新实例,该实例将再次调用MyPDO构造函数,这将创建,它将再次调用MyPDO构造函数,这将...这是工作中的无限递归。这样想:如果有人要告诉你这个:“如果将右脚移到左脚前面,则必须再次将右脚移到左脚前面”然后,那个带有步行固定装置的虐待狂疯子会指导您(在枪口下):“现在将右脚放在左前方”您需要花费多长时间才能执行大电子琴(或拆分),并且不能再走了。这就是您的代码中正在发生的事情。而且,稍微偏离主题的是,如果您遇到问题,并尝试在PHP中使用单例解决它,那么您将引入一个新问题...
10-05 23:23