用于Windows的PHP 7.0 ODBC驱动程序

时间:2015-12-10 11:41:59

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

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

到目前为止,一切都运行良好,当我使用MySQL数据库时,它减少了从我的Page的加载时间从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);

?>

但现在我的日志中出现了错误:

  

[12月10日11:55:26.629956 2015] [:错误] [pid 260:tid 968] [客户   :: 1:63003] PHP致命错误:未捕获错误:调用未定义   函数odbc_connect()in   C:\ Bitnami \ wampstack-7.0.0-0 \的Apache2 \ htdocs中\测试\ query.php:11 \ nStack   trace:\ n#0 {main} \ n抛出   C:\ Bitnami \ wampstack-7.0.0-0 \ apache2 \ htdocs \ test \ query.php on   第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环境需要一些东西。

有没有人遇到同样的问题并且已经修好了?

感谢和问候 多米

7 个答案:

答案 0 :(得分:9)

看看你的php.ini,字符串

extension=php_odbc.dll

似乎在新安装中缺失,至少我必须在我的新XAMPP安装中手动添加它(7.0.1) 并且意外地只是激活了pdo_odbc.dll

答案 1 :(得分:5)

PHP7 默认禁用了一些先前在 PHP5 中启用的模块。

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

extension=php_odbc.dll

上面的行已经存在并已注释掉;你真的需要添加它!

PHP在php.ini中查找C:\Windows\文件,但它也可能位于您计算机上的其他位置。因此,请检查C:\Windows\C:\php\以及您可能已安装PHP的其他地方。

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

C:\php\php.exe -m

或(从重新启动Web服务器/计算机后)来自.phtml文件,如下所示:

<? phpinfo(); ?>

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

提示:

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

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

答案 2 :(得分:2)

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

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

重置互联网信息服务: 在具有管理员权限类型的命令提示符下:

iisreset

这解决了我的问题。

答案 3 :(得分:1)

作为Adrian B的另一个提及官方司机的补充,您还可以查看https://github.com/thomsonreuters/msphpsql 这是一个非官方的港口。但是目前存在局限性。

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

答案 4 :(得分:0)

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

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

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

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

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

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