[英]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.