-1

我正在尝试连接到两个数据库来为我的几个数据库创建一个搜索引擎。这是一个测试代码。有人可以告诉我我做错了什么或者是否有可能。谢谢。

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']."&nbsp;".$row['esn']."&nbsp;".$row['order_type']."<br>";
}
4

4 回答 4

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 标准。评论有人吗?

于 2013-04-04T19:51:07.080 回答
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/

于 2013-04-04T19:57:12.357 回答
0

尝试查看此内容,也许您无法使用 querying 查询数据库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);
?>

您甚至可以改进此代码,也不能将其最小化!

于 2013-04-04T20:15:50.930 回答
0

mysql_connect返回一个$resource。你可以连接两次,每次都选择一个数据库(实际上,你可以从连接本身中选择一个数据库),然后使用每个连接。

但是,您的问题是您的 SELECT 不正确。您正在尝试从数据库中的表中选择字段,这是不正确的。事实上,您不能以如此奇特的方式获取两个不同的数据库,因为它们被认为是两组相互独立且不相关的信息。这就是存在表的原因,以适应该问题。

然而,这个其他答案可能有一个解决方案。

否则,您可以使用两个mysql_connect和两个资源连接到每个数据库,获取值并自己交叉它们。我知道,这不是最佳选择,但可以满足您的需求。

PS:如果您现在开始项目,请切换到 Mysqli 或 PDO。不推荐使用 Mysql。

于 2013-04-04T19:38:20.847 回答