使用SQLSrv和PHP 5.4.7连接到MSSQL时出错

时间:2013-03-27 03:56:29

标签: php sql-server

我正在尝试使用PHP连接到MSSQL数据库,并在尝试连接时遇到非常令人沮丧的错误。在打印出以下消息之前,它会加载一分钟:

    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[08001]: 
[Microsoft][SQL Server Native Client 11.0]Named Pipes Provider: Could not open a connection to SQL Server [53]. 

这是我的连接字符串:

DB::config("sqlsrv:Server={$dbHost} ; Database={$dbName}", $dbUser, $dbPass);

在我的DB课程中:

public static function config($dsn, $user, $pass)
    {
        self::$_pdo = @new PDO($dsn, $user, $pass);
        ...// intentionally left out

我非常困惑。我在php.ini文件中配置了以下模块:extension = php_pdo_sqlsrv_54_ts.dll。虽然我认为我安装正确,但我没有收到任何关于驱动程序无法正常工作的错误消息,但这一点PHP没有打印出来:

if (function_exists( 'sqlsrv_connect' ))
    echo "hey";

正如您从上面的错误消息中看到的那样,SQL Server Native Client 11似乎正在运行。我在Windows平台上。我试过禁用防火墙无济于事。我没有太多关于SQL服务器的信息,或者我会在这里分享它。

这是我第一次在Stack上发帖,所以如果我遗漏了一些关键信息,或者我没有以某种方式遵循礼仪,我很抱歉,但是任何帮助都是绝对值得赞赏的。


另外,我应该补充一点,我已经做了太多的谷歌搜索,并没有取得任何成功。

2 个答案:

答案 0 :(得分:7)

我的安装过程确实有效,但连接确实无效。我应该一直使用IP地址作为主机名,我不是。我在端口号之前也使用了冒号而不是逗号。最后,连接字符串中不允许任何空格,我认为它会被自动删除。所以,对于那些可能发现自己处于类似困境的人来说,这是一个有效的连接字符串:

$connectionString="sqlsrv:Server=123.123.12.1,9864;Database=mssqldatabaseWootWoot";

另外,为了回应我之前关于该函数sqlsrv_connect的观察,我没有启用该函数所需的驱动程序。它位于php_sqlsrv_54_ts.dll中,启用后,将该功能报告为现有。

感谢任何人花时间解决这个问题。

答案 1 :(得分:1)

我遇到了同样的问题,但我发现我不需要使用IP地址,服务器名称只是fime。此外,我不确定我的服务器使用的端口,我在此处找到了相关信息:How to find the port for MS SQL Server 2008?

我还发现以下链接有助于PDO工作:

PHP PDO Connection to SQL Server with integrated security?

Use of PDO in classes

MS SQL Server (PDO) — Microsoft SQL Server Functions (PDO_SQLSRV)

我知道ncksllvn解决了他的问题,所以我希望这有助于其他人访问!