【问题标题】:How to enable PDO_ODBC on Linux?如何在 Linux 上启用 PDO_ODBC?
【发布时间】:2020-08-27 06:09:12
【问题描述】:

我想使用PDO_ODBC(在 Centos 7 x64 位上)运行 Microsoft Access 数据库。但不幸的是,我在页面上收到此错误:

could not find driver

首先,我通过我的 connection.php 查看问题,但我的代码似乎没有问题(在 Windows 7 x64 位上测试)。

然后我认为驱动程序尚未启用,我查看phpinfo() 页面,是的驱动程序尚未启用。

然后我进入 php.ini 以启用驱动程序。我在 php.ini 中取消注释以下行:

extension=pdo_odbc

然后我使用以下命令重新启动 apache:

# /etc/init.d/apache2 restart

之后我查看phpinfo()页面,不幸的是我设置的设置尚未启用,这是phpinfo()的屏幕截图: phpinfo() page.

您能告诉我如何在 Linux (CentOS 7) 上启用 PDO_ODBC 吗?

更新以显示我的连接

connection.php

<?php 

    $dsn = "{Microsoft Access Driver (*.mdb, *.accdb)}";
    $db = "/home/www/html/cetak_absensi/uploaded/db_access/my_access_db.mdb";
    $user = "";
    $pass = "";

    if (!file_exists($db)) {
        die("File is not exists ! " . $db);
    }else{
        try {
            $koneksi = new PDO("odbc:DRIVER=".$dsn.";charset=UTF-8; Dbq=".$db."; Uid=".$user."; Pwd=".$pass.";");
            $koneksi->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch (PDOException $e) {
            echo "There is an error : <i>" . $e->getMessage() . "</i>";
            die();
        }
    }

【问题讨论】:

  • Driverextension 是两个不同的东西。还要检查您是否为您的网络服务器编辑了 正确 php.ini,而不是为 cli sapi 编辑的。 docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/…
  • @DanielW。 :我运行了这个命令来知道 php.ini 的位置:# php -i | grep "Loaded Configuration File"。输出为Loaded Configuration File =&gt; /etc/php/7.2/cli/php.ini。我更改了放置在输出上的 php.ini 的设置。
  • @DanielW。 : 我是 Linux 新手,我不知道如何按照文档所说的去做。我在终端运行curl https://packages.microsoft.com/config/rhel/7/prod.repo &gt; /etc/yum.repos.d/mssql-release.repo(就像文档说的那样),然后它说-bash: /etc/yum.repos.d/mssql-release.repo: No such file or directory
  • 我已经将 cli 上的 php.ini 恢复到以前的状态,然后转到 /etc/php/7.2/apache2/ini.php (正如phpinfo() 网站所说) 并取消注释 extension=pdo_odbc 并像上面的命令一样重新启动 apache2。再次检查phpinfo() 后,mysql 的 PDO 驱动程序消失了(我也取消了对此的注释)。我上面附上的截图之类的信息已经不存在了。
  • # php -i | grep "Loaded Configuration File"提供的信息比phpinfo()可靠吗?或者也许我在某个地方错了。顺便说一句,我尝试运行sudo curl https://packages.microsoft.com/config/rhel/7/prod.repo &gt; /etc/yum.repos.d/mssql-release.repo 仍然面临同样的拒绝。

标签: php linux php-7.2 pdo-odbc


【解决方案1】:

驱动和扩展不是一回事。

您可以在 microsoft.com 网站上找到驱动程序,如下所示或类似您的特定版本要求:

https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-ver15

您也可以尝试安装 GNU 软件包,例如“FreeTDS”。

另一个问题是,您正在编辑错误的php.ini 文件。

当运行php -i | grep.... 时,您正在执行/etc/php/7.2/cli/php.ini 中的PHP 的cli SAPI,但您真正想要的是apache SAPI php.ini,很可能位于/etc/php/7.2/apache/php.ini。转到您的php_ini() URL,正确的路径显示在显示的第一个或第二个表格中。

【讨论】:

  • 我将检查 php.ini 关于 PDO mysql 是否不再存在于列表中。关于安装Microsoft ODBC Driver,所有命令应该一个一个运行,还是一次运行? (顺便说一句,我选错了 curl 版本,我的错)。
  • @DontBullyingMe 对不起,我不能像我一样得到一个有效的解决方案,既不使用 CentOS 也不使用 ODBC。我认为 Stackoverflow 上已经有关于安装 FreeTDS、unixODBC 或 Microsoft 的 ODBC 的主题。
  • 所以我在 Ubuntu v.18.04.1 上安装了 unixODBC v.2.3.4 使用这个命令# apt-get install unixodbc 之后我重新启动apache2 使用此命令# /etc/init.d/apache2 restart。但是 pdo_odbc 仍然无法在phpinfo() 站点中运行,而是当我运行我的 connection.php 时,它会导致此错误Fatal error: Uncaught Error: Class 'PDO' not found in connection.php。以前是驱动,现在是PDO,不知道是哪部分做错了。
  • @DontBullyingMe 现在您切换了操作系统和 PHP 版本。您需要安装 PDO。 apt-cache search pdo
  • 给定命令的输出中没有 pdo 列表。这些是php7.2-common - documentation, examples and common module for PHP php7.2-mysql - MySQL module for PHP php7.2-odbc - ODBC module for PHP php7.2-pgsql - PostgreSQL module for PHP php7.2-sqlite3 - SQLite3 module for PHP... 的一些输出。
猜你喜欢
  • 1970-01-01
  • 2012-04-15
  • 1970-01-01
  • 2021-09-08
  • 1970-01-01
  • 1970-01-01
  • 2020-09-30
  • 2012-07-20
  • 1970-01-01
相关资源
最近更新 更多