Можно ли выполнить PHP-запрос к двум разным БД (MSSQL и MySQL) на разных серверах одновременно? - PullRequest
0 голосов
/ 17 февраля 2011

У меня есть две базы данных:

  • первая - MySQL
  • вторая - MSSQL

Мне нужно получить некоторую информацию из БД MSSQLоднако результат (Select) будет ограничен в соответствии с параметром (date) из MySQL.БД расположены на разных серверах.

Нужно ли выполнять два запроса для этого или возможно сделать это только за один?

Спасибо!

Ответы [ 5 ]

2 голосов
/ 17 февраля 2011

Можно было бы определить сервер MySQL как объект связанного сервера в MS SQL, и, следовательно, можно запрашивать только сервер MS SQL, вызывая связанный сервер MySQL в запросе.Это добавляет административные издержки, и вы можете потерять хорошую проверку ошибок на хосте MySQL, если он не работает.

Для меня гораздо больше смысла просто настроить два ресурса соединения и запросить их по отдельности.

1 голос
/ 17 февраля 2011

Вам, безусловно, нужны два разных соединения, поэтому 2 запроса, потому что ресурс этих соединений не одинаков (в любом случае, функция, используемая для выполнения запроса, не будет одинаковой, если вы не используете уровень абстракции для подключения кразные серверы, но все же вам понадобятся 2 ресурса подключения).

0 голосов
/ 17 февраля 2011

Афаик, если вы не используете какую-то абстракцию, которую не можете, базовые протоколы различны Я согласен с Майкл. Вот как я это реализовал.


//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 conf:


# A typical Microsoft server                                                                                                            
[BData]
        host = xxx.xxx.xxx.xxx
        port = 1433
        tds version = 8.0

Нет способа сделать это за один запрос. Вы должны сделать это в два раза.

Если вы хотите это в одном выражении, напишите вложенный запрос. что-то вроде

<code>
SELECT * FROM ms_sql_table WHERE some_var = (result_from_nested_mysql_subquery)
0 голосов
/ 17 февраля 2011
$con = mysql_connect(SQL_HOST,SQL_USER,SQL_PASS);
$con1 = mssql_connect(SQL_HOST1,SQL_USER1,SQL_PASS1);

mysql_query($mysql_query);
mssql_query($mssql_query);

это должно работать, но вам нужно использовать два разных соединения и запросы.

0 голосов
/ 17 февраля 2011

Нет, вы не можете.Невозможно спросить пул серверов об одном запросе.Однако вы можете перезапустить запрос следующим образом:

$sql = "SELECT * FROM table";
$result = array();
foreach($serversPool as $server){
  $result []= query($server, $sql);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...