适用于Windows的PHP 7.0 ODBC驱动程序


PHP 7.0 ODBC-Driver for Windows

我升级了我的PHP 5.6.30(https://www.apachefriends.org/de/download.html)到PHP 7.0(https://bitnami.com/stack/wamp/installer)

到目前为止,一切都很好,当我使用MySQL数据库时,它将页面的加载时间从1秒2缩短到了300毫秒。但现在我正试图用以下简单的脚本连接到MSSQL数据库,该脚本在我的旧安装(PHP 5.6)中运行良好:

<?php
    //Use the machine name and instance if multiple instances are used
    $server = 'Server-Adress';
    $user = '';
    $pass = '';
    //Define Port
    $port='Port=1433';
    $database = 'Databasename';
    $connection_string = "DRIVER={SQL Server};SERVER=$server;$port;DATABASE=$database";
    $conn = odbc_connect($connection_string,$user,$pass);
    if ($conn) {
        echo "Connection established.";
    } else{
        die("Connection could not be established.");
    }
    $sql = "SELECT * FROM st3_200 WHERE identifier = 1";
    $result = odbc_exec($conn,$sql);
    // Get Data From Result
      while ($data[] = odbc_fetch_array($result));
      // Free Result
      odbc_free_result($result);
      // Close Connection
      odbc_close($conn);
      // Show data
      print_r($data);
?>

但现在我的日志中出现了一个错误,上面写着:

【2015年12月10日星期四11:55:26.629956】【:错误】【pid 260:tid 968】【客户端:1:63003]PHP致命错误:未捕获错误:调用未定义中的函数odbc_connect()C: ''Bitnami''wampstack-0.0.0-0''apache2''htdocs''test''query.php:11''n堆栈跟踪:''n#0{main}''n抛出C: 上的''Bitnami''wampstack-0.0.0-0''apache2''htdocs''test''query.php11号线

首先我想,我的php.ini缺少一个扩展,所以我启用了"extension=php_pdo_odbc.dll"

与5.6版本中的php.ini的不同之处在于它有一个扩展名:"extension=php_mssql.dll"已启用。但我在新的PHP 7.0.ini 中找不到它们

所以我的意图是目前还没有odbc和PHP7的驱动程序?我在这里找到了一些Linux驱动程序:https://aur.archlinux.org/packages/php7-odbc/

但我的Windows环境需要一些东西。

有人有同样的问题并且已经解决了吗?

谢谢和问候Domi

查看php.ini中的字符串

extension=php_odbc.dll

似乎在新安装中丢失了,至少我不得不在新的XAMPP安装中手动添加它(7.0.1)并且意外地刚刚激活了pdo_odbc.dll

PHP7默认情况下禁用了一些以前在PHP5中启用的模块。

不过,这是一个简单的修复方法,因为扩展应该已经存在于PHP7附带的'ext'文件夹中。您只需要修改php.ini文件以包含以下行:

extension=php_odbc.dll

上面的行不是已经存在并被注释掉;你实际上需要添加它

PHP在C:'Windows'中查找php.ini文件,但它也可能位于您机器上的其他位置。因此,请检查C:'Windows'C:'php',或者您可能在其他地方安装了PHP。

做出更改后,您可以从命令行检查结果,如下所示:

C:'php'php.exe -m

或者(在重新启动网络服务器/机器之后)从.phtml文件中,如下所示:

<? phpinfo(); ?>

这将输出一个已启用模块的列表,这些模块现在应该包括odbc;如果没有,那么您可能修改了错误的php.ini文件(继续查找)或忘记重新启动web服务器/机器。


温馨提示:

如果你有一个非标准的安装,你可以使用这样的绝对路径:

extension=C:'php7x64'ext'php_odbc.dll

extension=php_mssql.dll。

延迟的原因似乎是打算将SQL 2016包含在该驱动程序中,以便将来可以更轻松地迁移。

更新(2016/02/12):

如前所述(见bhagdev回复),github上提供了适用于Windows的PHP sqlsrv驱动程序的"早期技术预览"。

打开php.ini文件并取消注释或添加以下行:

extension_dir = "C:'PHP'ext"  ;<- your PHP path
extension=php_pdo_odbc.dll
extension=php_odbc.dll

重置Internet信息服务:在命令提示符下,管理员权限类型:

iisreset

这为我解决了这个问题。

作为Adrian B's提到官方驱动程序的补充,您也可以检查https://github.com/thomsonreuters/msphpsql这是一个非官方港口。不过暂时有限制。

  1. 仅支持sqlsrv ODBC,不支持PDO
  2. 不支持ZTS,仅支持NTS
  3. 仅支持x86
  4. 它支持ODBC函数的子集,您可以在页面上看到列表

我们需要微软的x86驱动程序。http://www.microsoft.com/ja-jp/download/details.aspx?id=13255*对不起,"ja-jp"是我的。请选择您的国家/地区。有两个驱动程序,一个是32位,但我们需要64位(x86)版本。然后我们可以设置"ODBC数据源(64位)"。它出现在窗口上。最后,查看您的网站。也许它有效。3月29日。2016 Naio

我想你是对的,你需要为你的PHP客户端平台和操作系统下载SQL Server ODBC驱动程序
以下是类似问题的链接:调用未定义的函数odbc_connect()

你也可以尝试为MySQL安装这个连接器(如果你使用MySQL):连接器/ODBC

或者,如果您使用MSSQL:ODBC Driver 11 for SQL Server

我知道这个问题相当古老。但我最近遇到了同样的问题。。。

@Naio是对的:确实有不同版本的ODBC驱动程序,基于体系结构(32位或64位)。PHP使用的驱动程序取决于它自己的版本。

换句话说,如果您使用32位ODBC环境,请确保使用32位版本的PHP。。。

我的猜测是,通过从PHP 5.6切换到PHP 7.0,您也从32位版本切换到了64位版本。