使用 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的主要内容,如果未能解决你的问题,请参考以下文章