2014-09-18 4 views
0

У меня есть две базы данных, которые делят учетные данные пользователя. Я использую PDO. Означает ли это, что мне нужно создать два подключения PDO, по одному для каждой базы данных? Я проверил документы, dsn стоит только для одного dbname.PDO и несколько схем

+0

Вы хотите, чтобы только одно из подключений к базе данных было активным одновременно или оба соединения могут быть активны одновременно? – Mubo

ответ

1

Да, вы должны установить соединение с каждой базой данных.

2

Да, и это не относится к PDO. Каждое клиентское соединение MySQL, независимо от того, на каком языке, работает (не более) одна база данных. Если вы хотите изменить базу данных, вы должны использовать USE newDatabaseName. Но это, конечно, не имеет смысла с PDO, поэтому просто создайте два соединения.

EDIT:

Однако, как Marc B указал, вы можете использовать префикс для ссылки на другую базу данных на том же сервере MySQL. Но это не очень удобно, и я предполагаю, что это может вызвать проблемы, когда у вас есть определенные настройки соединения (например, некоторая кодировка, которая несовместима с другой БД).

3

Нет, вам понадобятся только два соединения, если доступ к базам данных осуществляется в физически различных экземплярах баз данных (разные серверные машины или разные копии базы данных) или использует DIFFERENT учетные данные для двух баз данных.

БД имя указывается в DSN просто база данных по умолчанию , но вы можете сделать тривиальным

SELECT fieldname FROM schema.table ... 

, чтобы переопределить значение по умолчанию. например

SELECT fieldname FROM table 

является эквивалентом

SELECT fieldname FROM default_specified_in_connection_string.table 
+0

Конечно! Я не думал о явной ссылке на БД. Хорошая точка зрения. – lxg

1

Зависит что вы подразумеваете под "базой данных". Некоторые люди используют этот термин для обращения к экземпляру MySQL. Каждое соединение PDO может ссылаться только на один экземпляр MySQL.

Но некоторые люди используют термин база данных как синоним «схемы». Может быть много схем на одном экземпляре MySQL, и вы можете использовать одно соединение PDO для доступа к любой схеме. Используйте один из следующих решений:

  • Использовать имена квалифицированы табличного @MarcB показывает
  • Выполните оператор USE schema_name изменить схему по умолчанию (см моего ответа на How do I select a MySQL database to use with PDO in PHP?)

Другого исключением является, если пользователю/паролю, который вы используете для подключения к экземпляру MySQL, были предоставлены привилегии только на одной из схем, которые вы хотите использовать. Затем вам нужно подключиться к другому пользователю/паролю для доступа к другим схемам.

Смежные вопросы