PHP MS 上的 v5.6 PDO SQL Server 2014

PHP v5.6 PDO on MS SQL Server 2014

问题

我目前无法使用 PHP 中的 PDO 连接到我的数据库。


规格


我试过的

我刚刚将 Microsoft 的 SQLSRV32.exe 文件中的驱动程序(从这个 link: https://www.microsoft.com/en-us/download/details.aspx?id=20098)安装到我的 PHP 扩展文件夹中,但是我仍然不能似乎连接到我的数据库。 (是的,我重新启动了 IIS)

我可以获得连接以使用旧的连接方法。


我的代码

我目前的PHPPDO连接代码如下:

try {
    $this->pdo = new PDO('odbc:host='.$this->hostname.':'.$this->port.';dbname='.$this->database,$this->username,$this->password);
} catch (PDOException $e) {
    echo 'Failed to get DB handle: '.$e->getMessage().'<br/>';
    exit;
}

上面的代码在我的 MyPDO class 构造函数中,因此当我实例化我的 class 时,它连接 $pdo = new MyPDO();.


我的代码的结果

问题是我收到此错误作为输出:

Failed to get DB handle: SQLSTATE[IM002] SQLDriverConnect: 0 [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified

非常感谢任何解决此问题的帮助!

  1. 仔细检查您的 php.ini 并确认您有行:

    extension=php_sqlsrv_56_nts.dll
    extension=php_pdo_sqlsrv_56_nts.dll 
    

    仅限 PDO php_pdo_sqlsrv_56_nts.dll 是强制性的。

  2. 在 PDO 驱动程序部分的 phpinfo() 中,您应该有:sqlsrv
  3. 使用PDO_SQLSRV DSN而不是odbc,例如:

    $this->pdo = new PDO( "sqlsrv:server=$hostname,$port;Database=$dbname", $username, $password);
    

    或者如果您有完整的数据源名称(例如 localhost\SQLEXPRESS)

    $this->pdo = new PDO( "sqlsrv:server=$serverName;Database=$dbname", $username, $password);
    

如果您收到 找不到驱动程序 异常,这意味着没有加载 sqlsrv 扩展。