繁体   English   中英

从PHP连接到MS SQL Server

[英]Connecting to MS SQL server from PHP

我正在尝试从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,扩展名= 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 / pwd尝试了此操作,导致

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

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

另一个线程中的某个人建议更改注册表项中的权限将起作用,但这对我的问题没有帮助。 PHP 5.3无法识别Native Client连接到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和广泛的互联网之间进行了广泛的搜索,没有运气。 显然,使用其他方法可以使数据库连接保持活动状态,但是通过PHP连接时出了什么问题?

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

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

您不能显式传递域登录名和密码(例如UID='MYDOMAIN\\user\u0026#39; )。

我在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.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM