Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MS SQL Server 2014上的PHP v5.6 PDO 问题_Php_Sql Server_Pdo_Php 5.6 - Fatal编程技术网

MS SQL Server 2014上的PHP v5.6 PDO 问题

MS SQL Server 2014上的PHP v5.6 PDO 问题,php,sql-server,pdo,php-5.6,Php,Sql Server,Pdo,Php 5.6,我目前无法使用PHP中的PDO连接到我的数据库 规格 PHP版本5.6.9 数据库:2008 R2上的Microsoft SQL Server 2014 来自phpinfo():PDO驱动程序:mysql、odbc、sqlite 使用iis6.1 我试过的 我刚刚将驱动程序安装在Microsoft的SQLSRV32.exe文件中(从以下链接:)到我的PHP extensions文件夹,但是我似乎仍然无法连接到我的数据库。(是的,我重新启动了IIS) 我可以使用旧的连接方法获得连接 我的

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


规格
  • PHP版本5.6.9
  • 数据库:2008 R2上的Microsoft SQL Server 2014
  • 来自phpinfo():PDO驱动程序:mysql、odbc、sqlite
  • 使用iis6.1

我试过的 我刚刚将驱动程序安装在Microsoft的SQLSRV32.exe文件中(从以下链接:)到我的PHP extensions文件夹,但是我似乎仍然无法连接到我的数据库。(是的,我重新启动了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;
}
试试看{
$this->pdo=new-pdo('odbc:host='.$this->hostname'.:'.$this->port';dbname='.$this->database,$this->username,$this->password);
}捕获(PDO$e){
echo“无法获取数据库句柄:”。$e->getMessage()。
; 出口 }
上面的代码在我的MyPDO类构造函数中,因此当我实例化我的类时,它是连接的


我的代码的结果 问题是我将此错误作为输出:

未能获取数据库句柄:SQLSTATE[IM002]SQLDriverConnect:0[Microsoft][ODBC驱动程序管理器]未找到数据源名称,且未指定默认驱动程序

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

  • 仔细检查php.ini并确认您有以下行:

    extension=php_sqlsrv_56_nts.dll
    extension=php_pdo_sqlsrv_56_nts.dll 
    
    仅适用于PDOphp_PDO_sqlsrv_56_nts.dll是必需的

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

    $this->pdo = new PDO( "sqlsrv:server=$hostname,$port;Database=$dbname", $username, $password);
    
    或者如果您有完整的数据源名称(例如localhost\SQLEXPRESS)


  • 如果您收到找不到驱动程序异常,则表示未加载sqlsrv扩展。

    看起来您无意中将用户名和密码连接到dsn(作为数据库名的一部分)中,而不是将其作为附加参数传入;它可能是:
    newpdo('odbc:host='.$this->hostname'.:'.$this->port';dbname='.$this->database,$this->username,$this->password)对不起,我用正确的代码更新了我的帖子。我仍然在经历这个问题OK,一个基本的问题,你想使用ODBC吗?如果是,您是否定义了此DSN?(我从Windows 2000开始就没有这样做过,但以前有一个控制面板来定义它们。一个选项卡用于用户特定的选项卡,另一个选项卡用于系统范围的选项卡。)一旦定义完成:
    new PDO(“odbc:dsn_name”,$user,$pass)这对我有用。非常感谢你。我在php.ini文件中缺少
    extension=php_pdo_sqlsrv_56_nts.dll
    ,并使用完整的数据源名称将我的pdo调用更改为您的第二个代码块
    $this->pdo = new PDO( "sqlsrv:server=$serverName;Database=$dbname", $username, $password);