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