Я новичок в PDO. Я хотел бы знать, есть ли что-то похожее на mysql_select_db в PDO, так что я могу переключаться между различными базами данных во время выполнения без необходимости создания нового объекта.
Нет, вам нужно будет создать два объекта PDO для отдельных соединений, если вы хотите использовать их во время выполнения.
Редактировать: Интересный момент by @laz ниже (который, как я предполагаю, является причиной отрицательных голосов в моем ответе). Я думал, исходя из предположения, что базы данных находятся на отдельных серверах tbh, и в этом случае мой ответ стоит.
Я знаю, что на пару месяцев я опаздываю, но вы можете переключаться между базами данных из вашего запроса.
Примеры:
$sql = "SELECT * FROM dbname.tablename"; $sql = "SELECT * FROM anotherdbname.anothertablename"
Поэтому, даже если ваш оригинальный объект $ pdo использовался как «бла-бла» в качестве имени db, вы все равно должны быть в порядке на основе выбранных мной примеров.
Похоже, что PDO не имеет переключения базы данных, потому что не каждый движок базы данных поддерживает его.
AFAIK PostgreSQL не имеет переключения базы данных, но предлагает схемы, и вы можете переключаться между ними.
Однако, если вы используете mysql, проверьте, работает ли это для вас:
$pdo = new PDO('mysql:dbname=db1;host=127.0.0.1','user','pass'); $sql = 'select count(*) from table_name'; $res = $pdo->query($sql); print_r($res->fetchAll()); $pdo->exec('USE db2'); $res = $pdo->query($sql); print_r($res->fetchAll());
Вам вообще не нужно указывать базу данных при подключении вообще. Пока вы указываете базу данных в каждом запросе, как сказал Лаз, это будет работать:
$dbh = new PDO('mysql:host=127.0.0.1','USER','PASS'); $query = "SELECT * FROM database1.table1"; $query = "SELECT * FROM database2.table1";
вам даже не нужно указывать базу данных в каждом запросе, просто используйте синтаксис msyql
USE db_name
и затем напишите ваши запросы