Использование PHP для подключения к удаленной базе данных MSSQL

Моя локальная среда — WAMP. Для нескольких страниц мне нужно получить доступ к удаленно размещенной базе данных MSSQL, выполнить запросы и получить результаты.

Мне была предоставлена ​​следующая информация (значения замаскированы):

  • IP-адрес удаленной машины MSSQL: 11.22.33.44
  • Имя базы данных: abcdefgh
  • Имя пользователя: db_username
  • Пароль: db_password

Я никогда раньше не подключался к удаленно размещенной БД. Из примера по адресу: http://php.net/manual/en/function.mssql-connect.php

Я попробовал это в тестовом файле mssql-connect.php:

<?php
// Server in the this format: <computer>\<instance name> or 
// <server>,<port> when using a non default port number
$server = '11.22.33.44\abcdefgh';

// Connect to MSSQL
$link = mssql_connect($server, 'db_username', 'db_password');

if (!$link) {
    die('Something went wrong while connecting to MSSQL');
}
?>

Что-то не могу подключиться. Я пробовал все варианты строки подключения:

$server = '11.22.33.44/abcdefgh';

$server = 'http://11.22.33.44\abcdefgh';

$server = 'https://11.22.33.44\abcdefgh';

$server = '11.22.33.44';

$server = '11.22.33.44:1431';

$server = '11.22.33.44,1431';

Каждый из них (и их варианты) возвращает «Что-то пошло не так при подключении к MSSQL».

Я включил mssql через php.ini и вижу phpinfo. Есть ли какие-либо дополнительные строки, которые необходимо передать?


person arunmenon    schedule 17.04.2015    source источник
comment
Попробуйте $server = '11.22.33.44',1433; — это должно работать, если это экземпляр по умолчанию, удаленные подключения включены и на вашем пути нет брандмауэра. Если это именованный экземпляр, вы должны включить эту информацию в свой вопрос. Имя базы данных не является частью имени сервера в строке подключения. Кроме того, вы можете подключиться к этому серверу из Management Studio? Возможно, попробуйте там, прежде чем отлаживать PHP-код, а также связываться со службой поддержки на хосте — если они размещают для вас SQL Server, они знают, как помочь вам подключиться к нему.   -  person Aaron Bertrand    schedule 17.04.2015
comment
Я только что попробовал $server = '11.22.33.44',1433; и получил ответ «Ошибка синтаксического анализа: синтаксическая ошибка, непредвиденная», «в C:\path_to_my_file\mssql-connect.php в строке 26».   -  person arunmenon    schedule 17.04.2015
comment
Там нет брандмауэра, так как я получаю доступ к этому через мое обычное подключение к Интернету на моем компьютере (настройки по умолчанию). Мне сообщили, что в удаленной БД разрешены удаленные подключения. Не уверен, является ли это экземпляром по умолчанию или именованным экземпляром. Отредактирую вопрос, когда получу эту информацию. Сейчас попробую через Management Studio. Веб-хост основан на LAMP, и я проверил phpinfo и обнаружил, что у них не включен mssql. Я свяжусь с ними завтра, чтобы включить его. Я хотел установить соединение перед попыткой его с моего хоста.   -  person arunmenon    schedule 17.04.2015
comment
Прости, $server = '11.22.33.44,1433';. Кроме того, ваш локальный компьютер — не единственное место, где может существовать брандмауэр.   -  person Aaron Bertrand    schedule 17.04.2015
comment
Просто быстро проверил после удаления запятой (и, следовательно, порт тоже). Он возвращает «Предупреждение: mssql_connect() [function.mssql-connect]: невозможно подключиться к серверу: 11.222.33.44 в C:\path_to_file\mssql-connect.php в строке 29. Что-то пошло не так при подключении к MSSQL».   -  person arunmenon    schedule 17.04.2015
comment
Строка 26: $server = '11.22.33.44';   -  person arunmenon    schedule 17.04.2015
comment
Пробовал $server = '11.22.33.44,1433';. Возвращает ошибку 'Предупреждение: mssql_connect() [function.mssql-connect]: невозможно подключиться к серверу: 11.22.33.44,1433 в C:\path_to_file\mssql-connect.php в строке 31 Что-то пошло не так при подключении в MSSQL'. Строка 31 — $link = mssql_connect($server, 'db_username', 'db_password');.   -  person arunmenon    schedule 17.04.2015


Ответы (5)


Во-первых, не предоставляйте здесь полный доступ к вашей базе данных (если ваш пользователь и пароль не являются просто заполнителями). Во-вторых, вы должны быть уверены, что на хосте, на котором работает ваш SQL, разрешен удаленный доступ. Если ваш сервер MSSQL не поддерживает удаленный доступ, независимо от того, как вы пытаетесь подключиться, вы всегда будете терпеть неудачу.

person taxicala    schedule 17.04.2015
comment
Что касается информации о доступе к БД, согласитесь, это очень важный момент. Я не добавил никакой информации. В моем вопросе была такая строка: «Мне была предоставлена ​​​​следующая информация ** (значения замаскированы) **». Про удаленный доступ, насколько я помню, по-моему упоминалось. Я проверю это сейчас. - person arunmenon; 17.04.2015
comment
Только что подтверждено, удаленный доступ включен. - person arunmenon; 17.04.2015

       $server = '11.22.33.44';
      // Connect to MSSQL
      $link = mssql_connect($server, 'db_username', 'db_password');

приведенный выше код должен работать, единственное, что mssql не разрешено настраивать удаленно, поэтому он блокирует доступ к вашему IP. вы должны включить mssql для удаленного доступа

person bob_1982    schedule 17.04.2015
comment
хорошо, но я получил подтверждение, что удаленный доступ включен. Есть ли доступ, специфичный для php, который должен быть включен? Или настройка/включение глобальной конфигурации разрешает доступ ко всем? Возможно, что-то нужно добавить на сервер mssql, специально разрешающий доступ к вызову из файла/источника php? У меня эти вопросы, потому что я получил подтверждение о включении удаленного доступа. - person arunmenon; 17.04.2015

У меня была такая же проблема после того, как я немного поиграл, я наконец получил ее для подключения с помощью sqlsrv_query()

Не уверен, что это из-за обновлений версии PHP или чего-то еще.

Проведите небольшое исследование по этому поводу, у меня это сработало.

person user315891    schedule 20.04.2015
comment
sqlsrv_query() это то, чего я не пробовал. Обязательно проверю это как можно скорее. Не сразу, так как я вносил изменения в код для отправки данных в немедленно (локально) доступную базу данных mySQL в некоторых областях, которые требовали быстрого чтения-записи данных. - person arunmenon; 26.04.2015

Вы можете успешно подключиться с этими кодами.

$username ="WRITEUSER";
$password = "WRITEPASS";
$database = "WRITEDB";
$server = "WRITESERVERIP";

$connection = mssql_connect($server, $username, $password);
if (!$connection) {  die('Not connected : ' . mssql_get_last_message());} 


$db_selected = mssql_select_db($databaseb, $connection);
if (!$db_selected) {
  die ('Can\'t use db : ' . mssql_get_last_message());
} else{

    // Success
}

С уважением.

person SwiftDeveloper    schedule 14.02.2016

для удаленного подключения к базе данных вы должны создать учетную запись пользователя в своем phpmyadmin и разрешить привилегии для этой учетной записи пользователя. при удаленном подключении к базе данных используйте имя пользователя и пароль, которые вы указали при создании учетной записи пользователя.

person Darshan Jadiye    schedule 16.10.2016
comment
Этот вопрос касается SQL Server, а не MySQL - person IMSoP; 30.04.2021