Подключение к SQL Server 2008 через PHP - PullRequest
6 голосов
/ 13 февраля 2012

Мне нужно подключиться к SQL Server 2008 через PHP (WAMP, последняя версия). У меня установлены и настроены драйверы sqlsrv, и они отображаются в phpinfo().

Я использую следующие строки для подключения к моей БД с использованием аутентификации Windows:

$serverName = "(local)";
$connectionOptions = array("Database"=>"MyTestDatabase");
$conn = sqlsrv_connect( $serverName, $connectionOptions) or die("Error!");

И я получаю следующую ошибку:

Array 
( 
    [0] => Array 
    ( 
        [0] => IMSSP 
        [SQLSTATE] => IMSSP 
        [1] => -49
        [code] => -49 
        [2] => This extension requires the Microsoft SQL Server 2011 Native Client. Access the following URL to download the Microsoft SQL Server 2011 Native Client ODBC driver for x86: http://go.microsoft.com/fwlink/?LinkId=163712 
        [message] => This extension requires the Microsoft SQL Server 2011 Native Client. Access the following URL to download the Microsoft SQL Server 2011 Native Client ODBC driver for x86: http://go.microsoft.com/fwlink/?LinkId=163712
    ) 
    [1] => Array 
    ( 
        [0] => IM002 
        [SQLSTATE] => IM002 
        [1] => 0 
        [code] => 0 
        [2] => [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified 
        [message] => [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
    )
)

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

Ответы [ 3 ]

3 голосов
/ 29 марта 2012

Ошибка вызвана проблемой разрешения в реестре.Существует ключ, в котором хранится путь к собственному клиенту, а идентификация, которую вы используете в пуле приложений, получает отказ в доступе.

  • Загрузите Process Monitor и следуйте инструкциям, приведенным в этом сообщении: http://www.iislogs.com/articles/processmonitorw3wp/ (Из этого туториала вы узнаете, как это сделать в IIS. С помощью WAMP вам потребуется найти процесс .exe, работающий в памяти)
  • Найдите раздел реестра, в котором процесс w3wp.exeотказано в доступе.Что в случае IIS, не уверен, как называется процесс в WAMP, но процедура такая же.В моем случае:

    HKLM\Software\ODBC\ODBCINST.INI\SQL Native Client 10.0
    
  • Запустите regedit и найдите ключ
  • Щелкните правой кнопкой мыши и перейдите в раздел Разрешения
  • Добавить сетевую службу в список и дать ей прочитатьразрешения.
  • Перезапустите пул приложений, и он должен работать
2 голосов
/ 13 февраля 2012

В зависимости от настроек может потребоваться вернуться к mssql_connect и соответствующим функциям.Это прекрасно работает с mssql 2008, и вы обычно не теряете значимую функциональность.

Вот пример настройки соединения с базой данных.В зависимости от конфигурации вам может потребоваться добавить информацию о порте и т. Д.

$hostname = "server.domain.com";
$database = "DatabaseName";
$username = "LocalSQLUserName";
$password = "P@ssw0rd";
$Connection = mssql_connect($hostname, $username, $password);

Если вы работаете в среде XAMP, то вполне вероятно, что вы все выполняете локально.В этом случае ваш сервер будет localhost или 127.0.0.1, и вы сможете определять свои собственные учетные записи в SQL.Как я уже сказал, я сам не использую учетные записи Windows, но вы можете добавить учетную запись NT на свой «сервер», а затем в инструменте управления SQL Server установить, чтобы этот пользователь имел доступ к используемой вами БД.Затем вы установили учетную запись и пароль и знаете, что они собой представляют.Если у вас возникли проблемы с учетной записью пользователя, вы можете попробовать computerName\userName.

Если вы не являетесь администратором, вам необходимо получить соответствующую информацию от них.

2 голосов
/ 13 февраля 2012

sqlsrv_connect Руководство по PHP

Попробуйте этот подход, чтобы увидеть, что ошибка на самом деле:

$conn = sqlsrv_connect( $serverName, $connectionInfo);

if( $conn ) {
     echo "Connection established.<br />";
} else {
     echo "Connection could not be established.<br />";
     die( print_r( sqlsrv_errors(), true));
}
...