原谅我,因为我是PDO的新手。我不确定是否有简单的解决方案。我已经在网上搜索了一段时间,还没有找到答案。
我有两个不同的数据库,我正在连接。
try {
$db1= new PDO( "sqlsrv:server=$server;Database = $dbname", $uid, $pwd);
$db2= new PDO( "sqlsrv:server=$server;Database = $db2name", $db2uid, $pwd);
}
我正在尝试根据公共ID从每个数据库的表中加入信息。我需要遍历信息以打印列表。
$sql=
"SELECT tableA.name, tableB.messages
FROM tableA INNER JOIN tableB ON tableA.id = tableB.id";
foreach ($db1->query($sql) as $row) {
//HOW CAN I QUERY DB2??
$id = $row['id'];
$name = $row['name'];
$msg= $row['messages'];
echo $name . "etc...";
}
如何修改此代码以查询两个PDO,以便它可以在同一个foreach循环中打印出结果?
编辑:我正在尝试将tableA中的ID与tableB中的ID匹配,然后在ID匹配时在tableB中的msg字段旁边的tableA中打印名称字段。
答案 0 :(得分:1)
让我们想象一下(因为你没有向我们提供你的数据库模式)你有db1 with table
Db1table
id_1
name_1
message_1
和db2 with table
Db2table
id_2
name_2
message_2
每个id_1指的是常见的对应id_2,例如
array('id_1'=>1, 'name_1'=>'smth', 'message_1'=>'smth')
必须与array('id_2'=>1, 'name_2'=>'smth', 'message_2'=>'smth')
结合(如您所见,id_1 == id_2)。
所以,您需要的代码是:
# make a "indexed" hash by common id column for fast access
$hash_by_id=array();
foreach($db2->query($sql2) as $row2){
$hash_by_id[$row2['id_2']]=$row2;
}
foreach($db1->query($sql1) as $row1){
$joined_row2=$hash_by_id[$row1['id_1']]; #pseudo-join
echo $joined_row2['id_2']==$row1['id_1'] # true
# from db1
echo $joined_row2['id_2'];
echo $joined_row2['name_2'];
echo $joined_row2['message_2'];
# from db2
echo $row1['id_1'];
echo $row1['name_1'];
echo $row1['message_1'];
}
答案 1 :(得分:0)
不要在foreach
条件内查询。首先查询,然后加入结果:
// Assuming your two queries are $sql1 and $sql2
// Unless both connections use the same SQL statement...
$res1 = $db1->query($sql1);
$res2 = $db2->query($sql2);
$results = array_merge($res1, $res2);
foreach ($results as $row) {
// echo the results
}