Практика подключения базы данных PHP

У меня есть сценарий, который подключается к нескольким базам данных (Oracle, MySQL и MSSQL), каждое подключение к базе данных не может использоваться каждый раз, когда выполняется сценарий, но все они могут использоваться в одном сценарии. Мой вопрос: «Лучше ли подключаться ко всем базам данных один раз в начале скрипта, даже если все соединения могут не использоваться. Или лучше подключиться к ним по мере необходимости, единственный улов, который мне понадобится для вызова соединения в цикле (поэтому соединение с базой данных было бы новым для X количества раз в цикле).

Да Пример кода №1:

// Connections at the beginning of the script $dbh_oracle = connect2db(); $dbh_mysql = connect2db(); $dbh_mssql = connect2db(); for ($i=1; $i<=5; $i++) { // NOTE: might not use all the connections $rs = queryDb($query,$dbh_*); // $dbh can be any of the 3 connections } 

Да Пример кода № 2:

 // Connections in the loop for ($i=1; $i<=5; $i++) { // NOTE: Would use all the connections but connecting multiple times $dbh_oracle = connect2db(); $dbh_mysql = connect2db(); $dbh_mssql = connect2db(); $rs_oracle = queryDb($query,$dbh_oracle); $rs_mysql = queryDb($query,$dbh_mysql); $rs_mssql = queryDb($query,$dbh_mssql); } 

теперь я знаю, что вы можете использовать постоянное соединение, но будет ли это одно соединение открытым для каждой базы данных в цикле? Подобно mysql_pconnect () , mssql_pconnect () и adodb для метода постоянных соединений Oracle . Я знаю, что постоянное соединение также может быть ресурсным свиноматом, и поскольку я ищу лучшую производительность / практику.

Вот хорошая статья о том, почему постоянные соединения могут вызвать проблемы

Solutions Collecting From Web of "Практика подключения базы данных PHP"

Используйте класс lazy wrapper:

 class Connection { private $pdo; private $dsn; public __construct($dsn) { $this->dsn = $dsn; } public query($sql) { //the connection will get established here if it hasn't been already if (is_null($this->pdo)) $this->pdo = new PDO($this->dsn); //use pdo to do a query here } } 

Надеюсь, вы уже используете PDO. Если нет, вы должны быть. PDO – независимая база данных. Если вы это сделали с помощью процедурных функций, вам нужно будет создать новый класс для каждого типа базы данных.

В любом случае, это всего лишь скелет (вы хотели бы добавить $params в query() , например), но вы должны иметь возможность получить эту идею. Соединение выполняется только при вызове query() . Построение объекта не создает соединение.

В стороне, рассмотрите использование Доктрины . Он имеет ленивые связи и облегчает жизнь в целом.

Лучшее правило производительности / практики просто: подключитесь только к одной базе данных.

Что касается подключений – попробуйте реализовать некоторый класс доступа к базе данных. Которые могут автоматически подключаться по требованию.