Одна из основных вещей, которые я вижу, это то, что вы используете PDOInstances
двумя разными способами.Он используется для списка экземпляров вашего класса Db
(устанавливается в статическом методе getInstance()
).НО также кажется, что вы пытаетесь сохранить экземпляр PDO
для базы данных (в конструкторе).
Если вы изменяете переменную, которую используете для хранения базы данных (класс Db
),тогда это будет, по крайней мере, означать, что у вас есть обе части данных ...
private $PDOInstances = array("db1"=>"","db2"=>""); // Remove static
private static $DbInstances = array("db1"=>"","db2"=>"");
public static function getInstance($db_type) {
if(self::$debug == 1){self::sqlDebug("connection","");}
if(self::$DbInstances[$db_type] == null){
self::$DbInstances[$db_type] = new self($db_type);
}
return self::$DbInstances[$db_type];
}
Я также не уверен, почему, когда вы звоните
$con = Db::getInstance("db1");
, вам нужно передать БДвведите для всех других методов ...
$res = $con->query("db1","SELECT userId from user WHERE userName='test'");
Конечно, это должно подразумеваться из-за соединения, вызываемого с типом базы данных.
Если в конструкторе вы только что это сделали (установитеPDOInstances
без части массива)
$this->PDOInstances = new PDO('mysql:dbname='.DB_NAME.';host='.DB_HOST,DB_USER ,DB_PWD,array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
, тогда весь доступ к базе данных осуществляется через этот ...
public function query($query){
if(self::$debug == 1){self::sqlDebug("read request",$query);}
return $this->PDOInstances->query($query);
}