【问题标题】:PHP v5.6 PDO on MS SQL Server 2014MS SQL Server 2014 上的 PHP v5.6 PDO
【发布时间】:2016-09-15 05:22:30
【问题描述】:

问题

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


规格

  • PHP 版本 5.6.9
  • 数据库:Microsoft SQL Server 2014 on 2008 R2
  • 来自 phpinfo():PDO 驱动程序:mysql、odbc、sqlite
  • 使用 IIS 6.1

我尝试过的

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

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


我的代码

我目前用于 PDO 连接的 PHP 代码如下:

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 类构造函数中,所以当我实例化我的类时,它连接到$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

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

【问题讨论】:

  • 看起来您无意中将用户名和密码连接到 dsn(作为 dbname 的一部分),而不是将它们作为附加参数传递;应该是:new PDO('odbc:host='.$this-&gt;hostname.':'.$this-&gt;port.';dbname='.$this-&gt;database, $this-&gt;username, $this-&gt;password);
  • 抱歉,我用正确的代码更新了我的帖子。我仍然遇到这个问题
  • 好的,基本问题,你想使用ODBC吗?如果是这样,您是否定义了此 DSN? (自 Windows 2000 天以来我没有这样做过,但曾经有一个用于定义它们的控制面板。一个选项卡用于特定于用户的选项卡,另一个选项卡用于系统范围的选项卡。)一旦定义you want to do something like this:@ 987654327@

标签: php sql-server pdo php-5.6


【解决方案1】:
  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 扩展。

【讨论】:

  • 这对我有用。非常感谢。我在 php.ini 文件中丢失了extension=php_pdo_sqlsrv_56_nts.dll,并使用完整的数据源名称将我的 PDO 调用更改为您的第二个代码块
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-17
  • 1970-01-01
  • 2016-08-17
  • 2014-02-04
  • 1970-01-01
  • 2013-02-03
相关资源
最近更新 更多