5

我将我的 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);

?>

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

[Thu Dec 10 11:55:26.629956 2015] [:error] [pid 260:tid 968] [client ::1:63003] PHP 致命错误:未捕获的错误:调用 C:\Bitnami\ 中的未定义函数 odbc_connect() wampstack-7.0.0-0\apache2\htdocs\test\query.php:11\n堆栈跟踪:\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 环境的东西。

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

感谢和问候多米

4

8 回答 8

10

看看你的 php.ini,字符串

extension=php_odbc.dll

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

于 2016-01-05T06:43:29.760 回答
5

PHP7默认情况下禁用了一些以前在PHP5.

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

extension=php_odbc.dll

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

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

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

C:\php\php.exe -m

或(重新启动网络服务器/机器后)从这样的.phtml文件:

<? phpinfo(); ?>

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


提示:

如果您有非标准安装,则可以使用如下绝对路径:

extension=C:\php7x64\ext\php_odbc.dll
于 2016-03-24T22:47:29.550 回答
3

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

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

更新(2016/02/12):

如此处所述(meet-bhagdev 回复),在github上有适用于 Windows 的 PHP sqlsrv 驱动程序的“早期技术预览” 。

于 2015-12-19T01:56:10.290 回答
2

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

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

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

iisreset

这解决了我的问题。

于 2016-01-12T18:55:55.803 回答
1

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

  1. 仅支持 sqlsrv ODBC,但不支持 PDO
  2. 不支持 ZTS,只支持 NTS
  3. 仅支持 x86
  4. 它支持 ODBC 功能的子集,您可以在页面上查看列表。
于 2016-01-03T20:13:55.377 回答
1

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

于 2016-03-29T10:41:41.313 回答
0

I know this question is rather old. But I've come across the same issue recently ...

@Naio is right : there are indeed different versions of ODBC drivers, based on the architecture (32bits or 64bits). The driver that PHP uses depends on its own version.

In other words, if you are using a 32bits ODBC environement, make sure to use a 32bits version of PHP ...

My guess is that, by switching from PHP 5.6 to PHP 7.0 you also switched from a 32bits version to a 64bits version.

于 2020-02-25T20:16:51.773 回答
0

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

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

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

于 2015-12-10T12:37:30.390 回答