Как Вы соединяетесь с несколькими базами данных MySQL по единственной веб-странице?

179
задан Gilles 'SO- stop being evil' 7 July 2014 в 06:14
поделиться

2 ответа

Предупреждение: mysql_xx функции удержаны от использования начиная с php 5.5 и удалены начиная с php 7.0 (см. http://php.net/manual/intro.mysql.php ), используйте mysqli_xx функции или см. ответ ниже с <часа> @Troelskn

, можно выполнить множественные вызовы к mysql_connect(), но если параметры являются тем же, необходимо передать верный для' $new_link' (четвертый) параметр, иначе то же соединение снова используется. Например:

$dbh1 = mysql_connect($hostname, $username, $password); 
$dbh2 = mysql_connect($hostname, $username, $password, true); 

mysql_select_db('database1', $dbh1);
mysql_select_db('database2', $dbh2);

Затем для запросов базы данных 1 передают первый идентификатор канала:

mysql_query('select * from tablename', $dbh1);

и для базы данных 2 передают второе:

mysql_query('select * from tablename', $dbh2);

, Если Вы не передаете идентификатор канала тогда, последнее созданное соединение используется (в этом случае то, представленное $dbh2), например:

mysql_query('select * from tablename');

Другие опции

, Если у пользователя MySQL есть доступ к обеим базам данных и они находятся на том же хосте (т.е. оба DBS доступны от того же соединения), Вы могли:

  • Сохраняют одно соединение открытым и вызов mysql_select_db() для свопинга между по мере необходимости. Я не уверен, что это - чистое решение, и Вы могли закончить тем, что запросили неправильную базу данных.
  • Определяют имя базы данных когда Вы таблицы ссылок в Ваших запросах (например, SELECT * FROM database2.tablename). Это, вероятно, будет болью для реализации.

Также ответ troelskn's чтения, потому что это - лучший подход, если Вы в состоянии использовать PDO, а не более старые расширения.

332
ответ дан ᴄʀᴏᴢᴇᴛ 23 November 2019 в 06:15
поделиться

Если Вы используете PHP5 (И Вы должны, учитывая, что PHP4 был удержан от использования), необходимо использовать PDO, так как это медленно становится новым стандартом. Одно (очень) важное преимущество PDO, то, что это поддерживает связанные параметры, который делает для намного большего количества безопасного кода.

Вы соединились бы через PDO, как это:

try {
  $db = new PDO('mysql:dbname=databasename;host=127.0.0.1', 'username', 'password');
} catch (PDOException $ex) {
  echo 'Connection failed: ' . $ex->getMessage();
}

(Конечно, заменяют databasename, имя пользователя и пароль выше)

можно тогда запросить базу данных как это:

$result = $db->query("select * from tablename");
foreach ($result as $row) {
  echo $row['foo'] . "\n";
}

Или, если у Вас есть переменные:

$stmt = $db->prepare("select * from tablename where id = :id");
$stmt->execute(array(':id' => 42));
$row = $stmt->fetch();

при необходимости в многочисленных связях, открытых сразу можно просто создать несколько экземпляров PDO:

try {
  $db1 = new PDO('mysql:dbname=databas1;host=127.0.0.1', 'username', 'password');
  $db2 = new PDO('mysql:dbname=databas2;host=127.0.0.1', 'username', 'password');
} catch (PDOException $ex) {
  echo 'Connection failed: ' . $ex->getMessage();
}
97
ответ дан Saul 23 November 2019 в 06:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: