【问题标题】:PHP 7.0 ODBC-Driver for Windows适用于 Windows 的 PHP 7.0 ODBC 驱动程序
【发布时间】:2016-03-16 00:51:33
【问题描述】:

我将我的 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] [:error] [pid 260:tid 968] [client ::1:63003] PHP 致命错误:未捕获错误:调用未定义 函数 odbc_connect() 在 C:\Bitnami\wampstack-7.0.0-0\apache2\htdocs\test\query.php:11\nStack 跟踪:\n#0 {main}\n 抛出 C:\Bitnami\wampstack-7.0.0-0\apache2\htdocs\test\query.php 上 第 11 行

首先我认为我的 php.ini 缺少扩展名,所以我启用了“extension=php_pdo_odbc.dll”

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

所以我的意思是现在还没有 odbc 和 PHP 7 的驱动程序吗? 我在这里找到了一些 Linux 驱动程序: https://aur.archlinux.org/packages/php7-odbc/

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

有没有人遇到过同样的问题并且已经解决了?

感谢和问候 多米

【问题讨论】:

  • 您的代码正在使用 ODBC 扩展,但您正在尝试加载两个不相关的扩展(一个 PDO 驱动程序和一个很好的旧 MSSQL 扩展)。
  • php_pdo_odbc.dll 不是 odbc 扩展,它是 PDO 的 ODBC 驱动程序。你想要php_odbc.dll

标签: php sql-server windows odbc php-7


【解决方案1】:

看看你的 php.ini,字符串

extension=php_odbc.dll

似乎在新安装中缺少,至少我必须在我的新 XAMPP 安装 (7.0.1) 中手动添加它 不小心激活了 pdo_odbc.dll

【讨论】:

    【解决方案2】:

    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
    

    【讨论】:

      【解决方案3】:

      extension=php_mssql.dll(或 extension=php_sqlsrv_56_nts.dll,如果您从 Microsoft Drivers for PHP 获得),是您的问题:PHP 7 的 Microsoft SQL 驱动程序尚未准备好,最新的 ETA 是 1 月下旬测试版。

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

      更新(2016 年 2 月 12 日):

      here(meet-bhagdev 回复)所述,github 上提供了适用于 Windows 的 PHP sqlsrv 驱动程序的“早期技术预览”。

      【讨论】:

        【解决方案4】:

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

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

        重置 Internet 信息服务: 在具有管理员权限的命令提示符下键入:

        iisreset
        

        这解决了我的问题。

        【讨论】:

          【解决方案5】:

          除了提到官方驱动的Adrian B`s,你也可以查看https://github.com/thomsonreuters/msphpsql 这是一个非官方的端口。不过暂时还是有限制的。

          1. 仅支持 sqlsrv ODBC,但不支持 PDO
          2. 不支持 ZTS,仅支持 NTS
          3. 仅支持 x86
          4. 它支持部分ODBC功能,您可以在页面上查看列表。

          【讨论】:

            【解决方案6】:

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

            【讨论】:

              【解决方案7】:

              我猜你是对的,你需要为你的 PHP 客户端平台和操作系统下载 SQL Server ODBC 驱动程序
              这是类似问题的链接:Call to undefined function odbc_connect()

              您也可以尝试为 MySQL 安装此连接器(如果您使用 MySQL):Connector/ODBC

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

              【讨论】:

                【解决方案8】:

                我知道这个问题已经很老了。但是我最近遇到了同样的问题......

                @Naio 是对的:根据架构(32 位或 64 位),确实存在不同版本的 ODBC 驱动程序。 PHP 使用的驱动程序取决于它自己的版本。

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

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

                【讨论】:

                  猜你喜欢
                  • 2021-09-28
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-10-15
                  • 1970-01-01
                  • 2017-11-27
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多