可以同时在不同的服务器上对两个不同的数据库(MSSQL和MySQL)执行PHP查询吗?

可以同时在不同的服务器上对两个不同的数据库(MSSQL和MySQL)执行PHP查询吗?,php,mysql,sql-server,multiple-databases,Php,Mysql,Sql Server,Multiple Databases,我有两个数据库: 第一个是MySQL 第二个是MSSQL 我需要从MSSQL数据库中获取一些信息,但是结果选择会受到来自MySQL数据库的参数日期的限制。DBs位于不同的服务器中 我是否必须为此执行两个查询,或者是否可以只在一个查询中执行 谢谢 您显然需要两个不同的连接,因此需要两个查询,因为这些连接的资源并不相同,因此用于执行查询的函数也不相同,除非您使用抽象层连接到不同的服务器,但是,您将需要2个连接资源。您显然需要两个不同的连接,因此需要2个查询因为这些连接的资源无论如何都不相同,用于执行

我有两个数据库:

第一个是MySQL 第二个是MSSQL 我需要从MSSQL数据库中获取一些信息,但是结果选择会受到来自MySQL数据库的参数日期的限制。DBs位于不同的服务器中

我是否必须为此执行两个查询,或者是否可以只在一个查询中执行


谢谢

您显然需要两个不同的连接,因此需要两个查询,因为这些连接的资源并不相同,因此用于执行查询的函数也不相同,除非您使用抽象层连接到不同的服务器,但是,您将需要2个连接资源。

您显然需要两个不同的连接,因此需要2个查询因为这些连接的资源无论如何都不相同,用于执行查询的函数将不相同,除非您使用抽象层连接到不同的服务器,但,您将需要2个连接资源。

可以将MySQL服务器定义为MS SQL中的链接服务器对象,因此可以仅查询MS SQL服务器,并在查询中调用MySQL链接服务器。但是,这增加了管理开销,如果MySQL主机关闭,您可能会丢失对它的良好错误检查


对我来说,只设置两个连接资源并分别查询它们更有意义。

可以将MySQL服务器定义为MS SQL中的链接服务器对象,因此可以只查询MS SQL服务器,在查询中调用MySQL链接服务器。但是,这增加了管理开销,如果MySQL主机关闭,您可能会丢失对它的良好错误检查


对我来说,只设置两个连接资源并分别查询它们更有意义。

不,您不能。无法向服务器池询问单个查询。但是,您可以像这样循环查询:

$sql = "SELECT * FROM table";
$result = array();
foreach($serversPool as $server){
  $result []= query($server, $sql);
}

不,你不能。无法向服务器池询问单个查询。但是,您可以像这样循环查询:

$sql = "SELECT * FROM table";
$result = array();
foreach($serversPool as $server){
  $result []= query($server, $sql);
}
这应该是可行的,但是您需要使用两种不同的连接和查询


这应该是可行的,但您需要使用两种不同的连接和查询。

Afaik,除非您使用某种抽象,否则底层协议是不同的。我同意迈克尔的观点。我就是这样实现的


//php5-sybase : Module for Sybase and MSSQL
//freetds-dev  : Implements Tabular DataStream protocol for linux which is used by Sybase and MSSQL
putenv('FREETDSCONF=/etc/freetds/freetds.conf');

function dbOpenConnection(){
        //create mssql connection
        $db = mssql_connect('host','user','pass');
        $msdb = mssql_select_db('db_name',$db);

        //create mysql connection
        $conn = mysql_connect('db_server','user','pass');
        mysql_select_db('db_name',$conn);

        return array($db, $msdb, $conn); 
}
以及您的freetds配置:


# A typical Microsoft server                                                                                                            
[BData]
        host = xxx.xxx.xxx.xxx
        port = 1433
        tds version = 8.0
在一个查询中不可能做到这一点。你必须在两分钟内完成

如果您希望它出现在一条语句中,请编写一个嵌套查询。这有点像

SELECT * FROM ms_sql_table WHERE some_var = (result_from_nested_mysql_subquery)

好吧,除非你使用某种你不能使用的抽象,否则底层协议是不同的。我同意迈克尔的观点。我就是这样实现的


//php5-sybase : Module for Sybase and MSSQL
//freetds-dev  : Implements Tabular DataStream protocol for linux which is used by Sybase and MSSQL
putenv('FREETDSCONF=/etc/freetds/freetds.conf');

function dbOpenConnection(){
        //create mssql connection
        $db = mssql_connect('host','user','pass');
        $msdb = mssql_select_db('db_name',$db);

        //create mysql connection
        $conn = mysql_connect('db_server','user','pass');
        mysql_select_db('db_name',$conn);

        return array($db, $msdb, $conn); 
}
以及您的freetds配置:


# A typical Microsoft server                                                                                                            
[BData]
        host = xxx.xxx.xxx.xxx
        port = 1433
        tds version = 8.0
在一个查询中不可能做到这一点。你必须在两分钟内完成

如果您希望它出现在一条语句中,请编写一个嵌套查询。这有点像

SELECT * FROM ms_sql_table WHERE some_var = (result_from_nested_mysql_subquery)

我会先执行MySQL查询,然后执行MSSQL查询。我会先执行MySQL查询,然后执行MSSQL查询。