【问题标题】:Connecting to MS SQL server from PHP从 PHP 连接到 MS SQL 服务器
【发布时间】:2013-06-17 11:33:07
【问题描述】:

我正在尝试从 PHP 连接到 SQL Server 数据库,但连接字符串出现问题。以下是我尝试过的方法及其效果的简要说明:

运行 PHP 5.3.13、Apache 2.2.22、Windows 7 和 SQL Server 2008 R2

我已经安装了 SQL Server Native Client 11.0

我已经放弃使用 MSSQL 驱动程序,而是使用 SQLSRV 驱动程序。

在 php.ini 中加载了这些扩展:extension=php_pdo_sqlsrv_53_ts.dll、extension=php_sqlsrv_53_ts.dll、 扩展=php_pdo.dll。

phpinfo() 将这些显示为活动:

Registered PHP Streams  php, file, glob, data, http, ftp, zip, compress.zlib, phar, sqlsrv
PDO drivers mysql, odbc, sqlite, sqlsrv
sqlsrv support  enabled

连接代码如下:

$serverName = "[servername]";
$connectionInfo = array( "Database"=>"[databasename]");
$conn = sqlsrv_connect( $serverName, $connectionInfo);

if( $conn )
{
     echo "Connection established.\n";
}
else
{
     echo "Connection could not be established.\n";
     die( print_r( sqlsrv_errors(), true));
}

字符串设置为使用 Windows 身份验证,sqlsrv_errors() 报告:

[message] => [Microsoft][SQL Server Native Client 11.0][SQL Server]Login failed for user '[networkname]\[machinename]'

我也尝试过使用我的网络 ID/密码,导致

[message] => [Microsoft][SQL Server Native Client 11.0][SQL Server]Login failed for user '[username]'

我确实知道数据库已启动且正常运行,因为我可以毫无问题地从 SQL Server 客户端和 sqlcmd 连接和运行查询。使用我的网络/机器凭据时,SQL 客户端和命令行工作。当我尝试使用用户名/密码时,命令行客户端失败。这表明任何 PHP 连接都应使用 Windows 身份验证进行连接。

另一个线程中的某人建议更改注册表项中的权限会起作用,但这对我的问题没有帮助。 PHP 5.3 not recognizing Native Client to connect to MS SQL

我还成功地创建了一个系统 DSN。连接测试报告成功:

Microsoft SQL Server Native Client Version 11.00.2100

Running connectivity tests...

Attempting connection
Connection established
Verifying option settings
INFO: A network alias was found for the DSN server. 'Protocol: DBMSSOCN; Address:     [servername]' was used to establish the connection.
Disconnecting from server

TESTS COMPLETED SUCCESSFULLY!

我在 stackoverflow.com 和互联网上进行了广泛的搜索,但一般都没有运气。显然,使用其他方法的 db 连接是活动的,但是我通过 PHP 的连接出了什么问题?

【问题讨论】:

    标签: php sql sql-server-2008 database-connection connection-string


    【解决方案1】:

    Microsoft 的 PHP 驱动程序有一个奇怪的编译器版本问题,并解决了我与 PHP 的 ODBC 驱动程序的连接问题:

    //$pdo = new PDO("sqlsrv:Server=$hostname;Database=$dbname;", $username, $password);  // works with proper driver for PHP.
    $pdo = new PDO("odbc:Driver={SQL Server};Server=$hostname;Database=$dbname;", $username, $password);  // works with proper driver for ODBC and PHP ODBC.
    

    【讨论】:

      【解决方案2】:

      SQLSRV 使用 UID (uid==NULL || strlen(uid) ==0) 的缺失表示它应该尝试在连接字符串中设置“受信任的连接”标志,即使用执行上下文暗示的凭据进行连接。

      您不能明确传递域登录名和密码(例如UID='MYDOMAIN\user')。

      【讨论】:

        【解决方案3】:

        我通过使用 sql server 身份验证创建新登录名解决了这个问题。我希望这对有类似问题的人有所帮助。

        【讨论】:

          猜你喜欢
          • 2023-03-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多