私は以下のPDOクラスを持っています:
class DB {
private $dbh;
private $stmt;
static $db_type;
static $connections;
public function __construct($db, $id="") {
switch($db) {
case "db1":
try{
$this->dbh = new PDO("mysql:host=localhost;dbname=ms".$id, 'root', '', array( PDO::ATTR_PERSISTENT => true ));
} catch(PDOException $e){
print "Error!: " . $e->getMessage() . "<br />";
die();
}
break;
case "db2":
try{
$this->dbh = new PDO("mysql:host=localhost;dbname=users", 'root', '', array( PDO::ATTR_PERSISTENT => true ));
} catch(PDOException $e){
print "Error!: " . $e->getMessage() . "<br />";
die();
}
break;
}
self::$db_type = $db;
}
static function init($db_type = ""){
print_r(self::$connections);
if(!isset(self::$connections[$db_type])){
self::$connections[$db_type] = new self($db_type);
}
return self::$connections[$db_type];
}
public static function query($query) {
self::$connections[self::$db_type]->stmt = self::$connections[self::$db_type]->dbh->prepare($query);
return self::$connections[self::$db_type];
}
public function bind($pos, $value, $type = null) {
if( is_null($type) ) {
switch( true ) {
case is_int($value):
$type = PDO::PARAM_INT;
break;
case is_bool($value):
$type = PDO::PARAM_BOOL;
break;
case is_null($value):
$type = PDO::PARAM_NULL;
break;
default:
$type = PDO::PARAM_STR;
}
}
self::$connections[self::$db_type]->stmt->bindValue($pos, $value, $type);
return self::$connections[self::$db_type];
}
public function execute() {
return self::$connections[self::$db_type]->stmt->execute();
}
}
次に私はしようとしました:
$id = 1;
DB::init('db1', $id);
そして、これは私にエラーを返します:
Error!: SQLSTATE[HY000] [1049] Unknown database 'ms'<br />
ms1 である必要があるのに、接続中に DB 名が ms になるのはなぜですか? ありがとう。