Подключение к нескольким базам данных с помощью sqlsrv_connect

#php #sql-server #php-5.3

#php #sql-сервер #php-5.3

Вопрос:

Кто-нибудь может мне помочь или дать совет по этой проблеме с подключением, с которой я сталкиваюсь. В принципе, на данный момент я могу подключаться к одной базе данных одновременно. Дело в том, что данные, которые я запрашиваю, поступают с нескольких веб-сайтов (все начинаются с V1_database …..). Например, моя база данных включает V1_database_newyork или V1_database_denver и т.д.

Я создал подобный запрос в Microsoft SQL Server Management Studio, который собирает всю базу данных, начиная с V1_database:

 SELECT name
FROM sys.databases
WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb') AND name LIKE 'V1_database%'
  

Мой текущий код для подключения к одной из моих баз данных выглядит следующим образом (это работает нормально):

        <?php
        /*data base connection */

        $serverName = ".SQLEXPRESS";
        $connectionOptions = array("Database"=>"V1_database_newyork",
         "UID"=>"username",
         "PWD" => "password");

        /* Connect using Windows Authentication */       
        $conn = sqlsrv_connect($serverName, $connectionOptions);

        /* Check whether connnection is established */
        if($conn === false)
        {
            die(print_r(sqlsrv_errors(), true));
        }


/* Close the connection. */
sqlsrv_close( $conn);
?>
  

Кто-нибудь может помочь мне адаптировать этот запрос, чтобы строка подключения позволяла мне запрашивать любую базу данных с помощью «V1_database%»?

Если что-то из этого непонятно, пожалуйста, дайте мне знать! Любой совет будет высоко оценен!

Приветствия,

Нил

Ответ №1:

Согласно документации PHP по mssql_connect:

 resource mssql_connect ([ string $servername [, string $username [, string $password [, bool $new_link ]]]] )
  

Возвращаемый ресурс должен использоваться во всех запросах, поэтому подключайтесь к MSSQL с помощью этого:

 $res = mssql_connect ([ string $servername [, string $username [, string $password [, bool $new_link ]]]] )
  

и использовать $res во всех запросах.

 mssql_query ( string $query [, resource $link_identifier [, int $batch_size = 0 ]] )
  

Если вам нужны подключения к двум базам данных, то используйте $res1 и $res2 .
Хорошей практикой является создание некоторого легкого класса для хранения не только ресурса подключения, но и других вещей, таких как последняя ошибка.

Комментарии:

1. Спасибо за ваш ответ softm. Я не совсем уверен, сработает ли это в моей ситуации. По сути, каждая база данных содержит данные об одном запуске проверки дорожки. У меня довольно много таких баз данных (т. Е. Несколько запусков). На одной из моих страниц на моем сайте мне нужно вывести некоторую базовую информацию о каждой базе данных … например, разделение и начальная и конечная мили пробега. Как вы думаете, что было бы лучшим способом сделать это? Любой совет был бы высоко оценен! спасибо, Нил

2. У меня была такая ситуация в прошлом, мой собственный класс подключения не использовал ссылки на ресурсы внутри запроса. Итак, все запросы были выполнены к последней подключенной базе данных. Итак, когда я инициализирую 2 базы данных в коде инициализации приложения, я подключил оба класса / переменные к разным базам данных… но на самом деле они запрашивают последнюю подключенную базу данных.