我正在尝试连接两个数据库,为我的几个数据库创建一个搜索引擎。这是一个测试代码。谁能告诉我我做错了什么或者是否有可能。感谢。
mysql_connect("localhost","user","pass");
mysql_select_db("db1");
mysql_select_db("db2");
$search=mysql_query("SELECT * from db1.repairs, db2.order from db1,db2");
while($row=mysql_fetch_array($search)){
echo $row['first_name']." ".$row['esn']." ".$row['order_type']."<br>";
}
答案 0 :(得分:1)
如果在表名之前指定数据库名称,则可以跨数据库进行查询,如此
SELECT a.col1, b.col2
FROM db1.table1 AS a
INNER JOIN db2.table2 AS b ON a.someIdFromA = b.someIdFromB
正如Korcholis提到的那样,问题出在你的选择中。如果可以避免,也不想使用mysql_*
函数。 PDO或MySqli是首选。
修改强> 至少这可以使用MySQL。我敢打赌它也适用于大多数其他RDBMS,但我没有其他方便测试,我不能说这是否符合SQL标准。评论任何人?
答案 1 :(得分:1)
您可以使用
<?php
$db1 = mysql_connect("localhost","user","pass");
$db2 = mysql_connect("remote","user","pass");
mysql_select_db("db1", $db1);
mysql_select_db("db1", $db2);
$query1 = mysql_query("USE somedatabase", $db1);
$query2 = mysql_query("USE otherdatabase", $db2);
或尝试使用在不同实例中处理这些连接的类 http://www.joni2back.com.ar/programacion/php-class-for-mysql-databases/
答案 2 :(得分:0)
mysql_connect
返回$resource
。您可以连接两次并选择每个数据库(实际上,您可以从连接本身中选择一个数据库),然后使用每个连接。
但是,您的问题是您的SELECT不正确。您正在尝试从数据库中的表中选择字段,这是不正确的。实际上,您无法以如此奇特的方式获取两个不同的数据库,因为它们被认为是两组独立且不相关的信息。这就是表存在的原因,以适应这个问题。
然而,This other回答可能有解决方案。
否则,您可以使用两个mysql_connect
和两个资源连接到每个数据库,获取值并自己交叉。我知道,这不是最佳选择,但可以满足您的需求。
PS:如果您现在正在开始项目,请切换到Mysqli或PDO。不推荐使用Mysql。
答案 3 :(得分:0)
尝试查看此内容,也许您无法通过查询FROM
来查询数据库:
<?php
$con1 = mysqli_connect("$hostname", "$user1", "$password1", "$db1");
if (mysqli_connect_errno($con1)) {
echo mysqli_connect_error();
}
$con2 = mysqli_connect("$hostname", "$user2", "$password2", "$db2");
if (mysqli_connect_errno($con2)) {
echo mysqli_connect_error();
}
$search1 = mysqli_query($con1, "SELECT * from $db1table");
$search2 = mysqli_query($con2, "SELECT * from $db2table");
/* Other PHP codes here */
mysqli_close($con1);
mysqli_close($con2);
?>
您甚至可以改进此代码,也不会将其最小化!