PHP 7.0 ODBC-Driver for Windows

与世无争的帅哥 提交于 2019-12-01 05:22:22

问题


I upgraded my PHP 5.6.30 (https://www.apachefriends.org/de/download.html) to PHP 7.0 (https://bitnami.com/stack/wamp/installer)

Everything worked fine so far and it reduces the loading time from my Page from 1,2 seconds to ~300 ms, when I use a MySQL-Database. But now I'm trying to connect to a MSSQL-Database with the following simple script, that worked fine with my old installation (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);

?>

But now I got an error in my logs that says:

[Thu Dec 10 11:55:26.629956 2015] [:error] [pid 260:tid 968] [client ::1:63003] PHP Fatal error: Uncaught Error: Call to undefined function odbc_connect() in C:\Bitnami\wampstack-7.0.0-0\apache2\htdocs\test\query.php:11\nStack trace:\n#0 {main}\n thrown in C:\Bitnami\wampstack-7.0.0-0\apache2\htdocs\test\query.php on line 11

First I thought, that my php.ini has a missing extension, so I enabled "extension=php_pdo_odbc.dll"

the difference from the php.ini in the 5.6 version is there is the extension: "extension=php_mssql.dll" enabled. But I can't find them in the new PHP 7.0.ini

So my intension is there is no existing driver for odbc and PHP 7 yet? I found some driver for Linux here: https://aur.archlinux.org/packages/php7-odbc/

But I need something for my Windows environment.

Does anyone had the same issue and has already fixed it?

Thank und Greeting Domi


回答1:


Take a look in your php.ini, the string

extension=php_odbc.dll

seems to be missing in new installations, at least i had to add it manually in my new XAMPP installation (7.0.1) and accidently just activated the pdo_odbc.dll




回答2:


PHP7 has a few modules disabled by default that were previously enabled in PHP5.

It's an easy fix though since the extension should already exist in the \ext\ folder that came with PHP7. You just need to modify your php.ini file to include the line:

extension=php_odbc.dll

The line above is not already present and commented out; you actually need to add it!

PHP looks for the php.ini file in C:\Windows\ but it may also be located elsewhere on your machine. So check both C:\Windows\ and C:\php\ or where ever else you may have installed PHP.

After making the change you can check the results from the command line like this:

C:\php\php.exe -m

or (after restarting the web server / machine) from a .phtml file like this:

<? phpinfo(); ?>

That will output a list of enabled modules which should now include odbc; if not, then you may have modified the wrong php.ini file (keep looking) or forgot to restart the web server / machine.


Tips:

If you have a non-standard installation, you can use an absolute path like this:

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



回答3:


extension=php_mssql.dll (or extension=php_sqlsrv_56_nts.dll if you get it from Microsoft Drivers for PHP), is your problem: the Microsoft SQL driver for PHP 7 is not yet ready, the latest ETA is late January for the beta.

It looks like the cause of the delay is the intention to include SQL 2016 in that driver so you can migrate easier in the future.

UPDATE (2016/02/12):

As stated here (meet-bhagdev reply), there is an "early technical preview" of the PHP sqlsrv driver for Windows available on github.




回答4:


Open your php.ini file and uncomment or add the following lines:

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

Reset Internet Information Services: On command prompt with admin rights type:

iisreset

This fixed the problem for me.




回答5:


As an addition to Adrian B`s which mentions the official driver, you can also check https://github.com/thomsonreuters/msphpsql This is an unofficial port. However there are limitations for the time being.

  1. Supports only sqlsrv ODBC but not PDO
  2. Doesn`t support ZTS, only NTS
  3. Supports only x86
  4. It supports a subset of ODBC functions , you can see the list on the page.



回答6:


I guess you was right, you need download the SQL Server ODBC driver for your PHP client platform and OS.
Here is the link for the similar issue: Call to undefined function odbc_connect()

also you can try to install this connector for MySQL (if you use MySQL): Connector/ODBC

or if you use MSSQL: ODBC Driver 11 for SQL Server




回答7:


We need x86 driver from Microsoft. http://www.microsoft.com/ja-jp/download/details.aspx?id=13255 *Sorry, 'ja-jp' is mine. Please select your country. There are 2 drivers, one is 32bit, but we need 64bit(x86) version. Then we could set "ODBC data source (64bit)". It appears on the window. Last, check your web. Maybe it works. Mar. 29th. 2016 Naio



来源:https://stackoverflow.com/questions/34200997/php-7-0-odbc-driver-for-windows

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!