使用 PDO 连接到 SQL Server 2008

Posted

技术标签:

【中文标题】使用 PDO 连接到 SQL Server 2008【英文标题】:Connect to SQL Server 2008 with PDO 【发布时间】:2010-10-22 07:31:54 【问题描述】:

我正在尝试在 Windows XP sp2 上使用 php 5.2.9-2 连接到 SQL Server 2008(非 express)。我可以从同一台机器上的 SQL Server Management Studio 很好地连接到远程 SQL Server。

我的第一次尝试是这样的:

$conn = new PDO("mssql:host=$host;dbname=$db", $user, $pass);

这给出了这个错误:

PHP致命错误: 带有消息的未捕获异常“PDOException” 'SQLSTATE[0100] 无法连接:SQL Server 不可用或不存在。 拒绝访问。 (严重性 9)'

第二次尝试(发现于experts-exchange)

$conn = new PDO("odbc:Driver=SQL Server Native Client 10.0;Server=$host;Database=$db;Uid=$user;Pwd=$pass", 
                         $user, $pass);

这可行,但我不能使用PDO::lastInsertId(),我希望能够:

 驱动不支持这个函数:驱动不支持lastInsertId()

你有什么建议吗?任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

我很确定带有 mssql 数据服务器类型的 pdo 需要 dblib 才能连接。你的机器上安装了 dblib 吗?确保您可以在系统路径中的某处找到 ntwdblib.dll。我知道这与您收到的错误消息不符,但我不确定我是否相信错误消息。

【讨论】:

【参考方案2】:

我按照here 的建议更新了 ntwdblib.dll,现在它可以工作了。

不幸的是,我仍然不能使用PDO::lastInsertId(),因为显然这个驱动程序也不支持它,所以真的不值得这么麻烦。但是,我可以使用等效的 SELECT @@IDENTITY as Id

【讨论】:

【参考方案3】:

您不能使用 SQL Server 身份验证,因为只允许 Windows 身份验证。

检查服务器是否为running Mixed mode authentication.

还要检查this SO question 是否对您有帮助。

【讨论】:

谢谢。另一个问题虽然没有解决方案。它正在运行混合模式,因为我可以使用 Windows 身份验证或使用我为数据库创建的 SQL Server 登录名通过 SQL Server Management Studio 进行连接。

以上是关于使用 PDO 连接到 SQL Server 2008的主要内容,如果未能解决你的问题,请参考以下文章

PHP PDO 连接到具有集成安全性的 SQL Server?

php 无法连接到 sql server 2008(使用 pdo dblib)

如何使用 PHP PDO 从 Mac 连接到 Sql Server?

PHP PDO 连接到 Advantage 数据库 SQL Server

是否可以使用 PHP7 连接到 SQL Server 2000?

使用 PDO ODBC SQL Server 连接时定义编码?