【问题标题】:Connecting to MSSQL Server from PHP从 PHP 连接到 MSSQL Server
【发布时间】:2020-05-11 01:13:45
【问题描述】:

我已按照https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-ver15https://docs.microsoft.com/en-us/sql/connect/php/installation-tutorial-linux-mac?view=sql-server-ver15 的指南进行操作,PHP 正在查找驱动程序/服务器,但现在我遇到了身份验证错误。

已验证服务器已配置为“SQL Server 和 Windows 身份验证模式”并允许远程连接到服务器。

为了得到这个错误,我相信这意味着代码至少正在连接并尝试与服务器进行身份验证(将服务器更改为一些无意义的服务器名称/位置会产生超时错误) - 相当肯定这消除了任何问题这将在身份验证步骤之前进行。

仍然,我收到如下错误...

PDOException: SQLSTATE[28000]: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]用户“用户名”登录失败。在 /var/www/html/connect.php:10 堆栈跟踪: #0 /var/www/html/connect.php(10): PDO->__construct('sqlsrv:Server=S...', 'username', 'password') #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);
}

注意:我已经从我的代码中删除了所有敏感信息...所以我使用的用户名和密码不是“用户名”和“密码”,并且与问题无关。

【问题讨论】:

  • 您的脚本似乎正在连接到数据库,因为它针对无效凭据而不是连接错误引发错误。在您的错误中,用户名是它尝试连接的“用户名”,这是正确的还是您替换了它以隐藏真实的用户名?
  • 我编辑了我的真实用户名并替换为假值
  • 抱歉,当您实际连接到服务器时,我删除了我的原始评论,问题在于您提供的凭据
  • 好的,是否可以尝试使用不同的凭据集?
  • 也试过了:(

标签: php sql-server docker sqlsrv


【解决方案1】:

我已经在我的生产环境中使用了这个:

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

    return $link;

我还必须手动进入数据库并允许先前创建的用户拥有适当的权限(DB->Security->Users),您也可以检查一下。告诉我进展如何。

【讨论】:

    猜你喜欢
    • 2011-08-31
    • 2014-05-07
    • 1970-01-01
    • 2014-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    相关资源
    最近更新 更多