Подключение к серверу MS SQL с PHP - PullRequest
1 голос
/ 24 января 2020

Я следовал инструкциям в https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-ver15 и https://docs.microsoft.com/en-us/sql/connect/php/installation-tutorial-linux-mac?view=sql-server-ver15 и PHP находит драйверы / сервер, но теперь я получаю ошибку аутентификации.

Проверено, что сервер настроен для «SQL Сервер и Windows Режим аутентификации» и разрешает удаленные подключения к серверу.

Чтобы получить эту ошибку, я полагаю, это означает, что код по крайней мере соединяется и пытается аутентифицироваться с сервером (изменение сервера на какое-то бессмысленное имя / местоположение сервера приводит к ошибке тайм-аута) - достаточно точно, что устраняет любые проблемы, которые могут возникнуть до шага аутентификации.

Тем не менее я получаю сообщение об ошибке следующим образом ...

PDOException: SQLSTATE [28000]: [Microsoft] [ ODB C Драйвер 17 для SQL Сервер] [SQL Сервер] Ошибка входа пользователя 'username'. in / var / www/html/connect.php: 10 Трассировка стека: # 0 / var / www/html/connect.php (10): конструкция PDO -> __ («sqlsrv: Server = S ...», «имя пользователя», «пароль») # 1 {main} root@containerIdGoesHere: / var / www/html

<?php

$user = 'username';
$pass = 'password';

try {
     $pdo = new PDO("sqlsrv:Server=SomeServer,1433;Database=SomeDb", $user, $pass);
     $pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(Exception $e) {
    echo 'See error log';
    $elog = fopen('errorlog.txt', 'w') or die("Couldn't open file");
    fwrite($elog, $e);
    fclose($elog);
}

Примечание: я удалил любую конфиденциальную информацию из своего кода ... поэтому имя пользователя и pw I ' Я использую не «имя пользователя» и «пароль» и не связаны с проблемой.

1 Ответ

1 голос
/ 24 января 2020

У меня это работает в моей производственной среде:

    $db = "DatabaseName";
    $password = "Password";
    $server = "TheSQLServer";
    $user = "username";
    $link = new PDO(
        "sqlsrv:Server=" . $server . 
        ";Database=" . $db, 
        $user, 
        $password
    );  

    return $link;

Мне также пришлось вручную войти в БД и позволить ранее созданному пользователю иметь соответствующие права на нее (БД-> Безопасность -> Пользователи), вы можете проверить это также. Дайте мне знать, как это происходит.

...