【发布时间】:2012-03-24 05:32:40
【问题描述】:
我是 PDO 的新手。我想知道PDO中是否有类似mysql_select_db的东西,这样我就可以在运行时在不同的数据库之间切换而无需创建新对象。
【问题讨论】:
-
只需创建多个 PDO 对象,每个对象都有自己的连接。
-
只需使用 USE 语句即可。见stackoverflow.com/questions/8705195/…
标签: php
我是 PDO 的新手。我想知道PDO中是否有类似mysql_select_db的东西,这样我就可以在运行时在不同的数据库之间切换而无需创建新对象。
【问题讨论】:
标签: php
没有,如果您想在运行时同时使用这两个 PDO 对象,则需要为单独的连接创建两个 PDO 对象。
编辑:下面@laz 的有趣观点(我猜这是我的答案投反对票的原因)。我在假设数据库位于不同的服务器上的假设下思考,在这种情况下我的答案是正确的。
【讨论】:
看起来 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());
【讨论】:
我知道我迟到了几个月,但您应该能够在查询中在数据库之间切换。
例子:
$sql = "SELECT * FROM dbname.tablename";
$sql = "SELECT * FROM anotherdbname.anothertablename"
因此,即使您的原始 $pdo 对象使用 'blahblah' 作为 dbname,根据我提供的选择示例,您仍然应该没问题。
【讨论】:
您实际上根本不需要在连接时指定数据库。只要您在每个查询中指定数据库,正如 Laz 所说,这将起作用:
$dbh = new PDO('mysql:host=127.0.0.1','USER','PASS');
$query = "SELECT * FROM database1.table1";
$query = "SELECT * FROM database2.table1";
【讨论】:
database.table”
SELECT * FROM database1.table1,导致错误“未选择数据库”。
你甚至不需要在每个查询中指定数据库,只需使用 msyql 语法
USE db_name
然后写下你的请求
【讨论】:
dbname=xxx; 排除在 PDO 初始化程序之外时。