【问题标题】:Connect to SQL Server 2008 with PDO使用 PDO 连接到 SQL Server 2008
【发布时间】: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()

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

【问题讨论】:

    标签: php sql-server pdo


    【解决方案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 进行连接。
        猜你喜欢
        • 2015-07-21
        • 2011-07-17
        • 2012-09-26
        • 2020-10-30
        • 2011-01-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多