Я потратил последние несколько часов, пытаясь найти ответ на «лучший», наиболее логичный и т. Д. Способ написать класс базы данных php для одновременного подключения к одной базе данных postgresql и одному mysql. дб. Кроме того, я хотел бы принять дизайн внедрения зависимостей, но я новичок в этой концепции.
Пока что я придумал ...
class Database {
public function PgSqlConnect() {
/* Connect to database */
$host = 'localhost';
$dbname = '---';
$user = '---';
$pass = '---';
$timeout = 5; /* seconds */
try {
$pgsql_dbh = new PDO("pgsql:host=$host; dbname=$dbname", $user, $pass);
$pgsql_dbh->setAttribute( PDO::ATTR_TIMEOUT, $timeout );
$pgsql_dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
return $pgsql_dbh;
} catch( PDOException $e ) {
echo 'Unable to connect to database: ' . $e->getMessage();
}
}
public function MySqlConnect() {
/* Connect to database */
$host = 'localhost';
$dbname = '---';
$user = '---';
$pass = '---';
$timeout = 5; /* seconds */
try {
$mysql_dbh = new PDO("mysql:host=$host; dbname=$dbname", $user, $pass);
$mysql_dbh->setAttribute( PDO::ATTR_TIMEOUT, $timeout );
$mysql_dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
return $mysql_dbh;
} catch( PDOException $e ) {
echo 'Unable to connect to database: ' . $e->getMessage();
}
}
}
Очевидно, что дублированный код нарушает подход DRY. Я знаю и видел много примеров нескольких подключений к базе данных, но большинство из них имеют дело с одним и тем же драйвером и не предоставляют возможности DI.
Я также должен добавить, что я рассматривал возможность размещения деталей соединения в конструкторе класса базы данных как ...
$driver = 'mysql';
...
$mysqldb = new Database($driver,$un,$pw,...);
$driver = 'pgsql';
...
$pgsqldb = new Database($driver,$un,$pw,...);
, но я не знаю, действительно ли это хорошая идея и насколько хорошо это будет работать с DI.
Большое спасибо!