2013-02-19 58 views
2

我试图使用字符串连接:MS SQL SERVER,PHP,PDO,ODBC:用户登录失败

odbc:Driver={SQL Server Native Client 11.0};Server=(localdb)\v11.0;Database=test;uid=sa;password=123321; 

结果:SQLSTATE [28000]的SQLDriverConnect:18456 [微软] [SQL Server本机客户端11.0] [SQL Server]用户'sa'登录失败。

当我尝试使用Windows ODBC数据源管理员连接时,连接成功。

问题可能在哪里?

+1

在相关说明,你似乎使用Windows,所以[SQLSRV](http://php.net/sqlsrv)扩展,它也提供了一个[PDO驱动程序](http://www.php.net/manual/en/ref.pdo-sqlsrv.php),可能是ODBC的一个有趣的替代方案。 – 2013-02-19 08:51:03

+0

我尝试过,但它甚至找不到实例(localdb)\ v11.0或使用cmd/sqllocaldb命令创建的实例 – Mansoor 2013-02-19 09:00:47

回答

4

网络用户'sa'没有Microsoft SQL Server的权限。
为网络用户提供对Microsoft SQL Server的访问权限的最佳方式是创建一个Windows组(,例如EGUSERS),并允许在Microsoft SQL Server的安全登录中对Windows组进行服务器访问。
将需要访问Microsoft SQL Server的所有网络用户放入Windows组(EGUSERS)。

+0

连接字符串应如何使用Windows组看起来像? – Mansoor 2013-02-19 09:01:49

+2

或如何使用Windows身份验证通过ODBC进行连接? – Mansoor 2013-02-19 09:18:13

+2

请参阅[this](http://msdn.microsoft.com/zh-cn/library/ff647396.aspx)教程。 – omid 2013-02-19 09:22:41

1

检查,如果你有MSSQL Server上设置的权限认证方式: https://msdn.microsoft.com/en-us/library/ms188670.aspx

你也有两种方法通过使用采用给定的ODBC驱动程序PHP_PDO_ODBC分机连接通过PHP/PDO到MSSQL ConnectionString的或使用PHP_PDO_SQLSRV_xx_TS或PHP_PDO_SQLSRV_xx_NTS扩展,你可以在这里找到https://www.microsoft.com/en-us/download/details.aspx?id=20098或使用PHP_PDO_SQLSRV_xx_(N)TS扩展时使用这里的64位非官方http://robsphp.blogspot.nl/2012/06/unofficial-microsoft-sql-server-driver.html

连接字符串(仅适用于32位PHP!):

$hostname='127.0.0.1'; 
$dbname='test'; 
$username='user'; 
$password='pw'; 
$dbDB = new PDO("sqlsrv:Server=$hostname;Database=$dbname", $username, $password); 

连接字符串时使用PHP_PDO_ODBC扩展:(!)

//use any of these or check exact MSSQL ODBC drivername in "ODBC Data Source Administrator" 
$mssqldriver = '{SQL Server}'; 
$mssqldriver = '{SQL Server Native Client 11.0}'; 
$mssqldriver = '{ODBC Driver 11 for SQL Server}'; 

$hostname='127.0.0.1'; 
$dbname='test'; 
$username='user'; 
$password='pw'; 
$dbDB = new PDO("odbc:Driver=$mssqldriver;Server=$hostname;Database=$dbname", $username, $password); 

当测试其返回66条记录使用PHP_PDO_ODBC扩展了〜500毫秒(所有三个MSSQL ODBC驱动程序),但使用64位时,一个简单的查询PHP_PDO_SQLSRV_TS花费了〜5000ms。慢10倍!还没有尝试32位或NTS变种。 我的开发电脑是Windows 7 SP1使用WAMPx64 PHP 5.5.12和我用PHP_PDO_SQLSRV_55_TS