如何将 pdo_odbc.ini 扩展设置更改为 libodbc.so

问题描述 投票:0回答:1

在离线 Ubuntu 22.04 机器上安装 LAMP,以测试 odbc-mdbtools 设置是否已准备好用于在线服务器,该服务器需要读取和写入 MS Access,以便使用基于 Microsoft 的平板电脑发送/接受(在有人说为什么要这样做之前)。

首先安装unixODBC,然后安装odbc-mdbtools(在意识到它无论如何都会添加它之前)。 编辑 php.ini 以启用 pdo-odbc 扩展。 测试没有得到任何响应,查看 phpinfo 发现 pdo-odbc 没有随 php8.1 安装。安装它

suo apt-get install php-odbc

现在 odbc 显示在 phpinfo 输出中,但测试脚本仍然无法连接,但抛出错误,表明它正在尝试使用 mysql。因此,对 pdo-odbc.ini 进行了 sudoedit:

#; configuration for php odbc module
; priority=20
extension=pdo_odbc.so

尝试将扩展名更改为“libodbc.so”,这是 unixODBC 替换,但测试脚本的输出显示“未找到驱动程序”。该扩展当然可用'./usr/lib/x86_64-linux-gnu/libodbc.so'

我怎样才能让 php-pdo 使用它(甚至尝试清除 unixodbc 和 odbc-mbtools 并重新安装 odbc-mdbtools,希望它能将扩展名弹出 ini 文件本身)。

php pdo odbc mdbtools
1个回答
0
投票

更新1

为了使其与 PDO 配合使用,

libodbccr
似乎存在问题,需要解决方法。

这是更新的 Dockerfile:

FROM ubuntu:22.04
RUN apt update
# tzdata is a pre-requisite for PHP
# this install tzdata in a non-interactive fashion
RUN ln -fs /usr/share/zoneinfo/America/New_York /etc/localtime; DEBIAN_FRONTEND=noninteractive apt-get install -y tzdata; dpkg-reconfigure --frontend noninteractive tzdata
RUN apt install -y php php-odbc mdbtools mdbtools-dev

# This will need to be updated per your installation.
# To find the right directory run "(cd / && find -name 'libodbccr.so*')"
RUN ln -s /usr/lib/aarch64-linux-gnu/libodbccr.so.2 /usr/lib/aarch64-linux-gnu/libodbccr.so

以及通过 PDO 的简单数据库访问脚本:

<?php
$db = "/working/MYDB.mdb";
$conn = new PDO("odbc:Driver=MDBTools;DBQ=//$db;UID=;PWD=;",'','');
$data = $conn->prepare("SELECT * FROM D_1_Assessors");
$data->execute();
$done = $data->fetch();
echo "foo = " . $done['AName'] . "\n";
echo "DONE\n";
?>

原版

你安装了吗

mdbtools-dev

我已经使用以下 Dockerfile 在 docker 中启动了它,它“正常工作”,无需编辑任何 php ini 文件:

FROM ubuntu:22.04
RUN apt update
# tzdata is a pre-requisite for PHP
# this install tzdata in a non-interactive fashion
RUN ln -fs /usr/share/zoneinfo/America/New_York /etc/localtime; DEBIAN_FRONTEND=noninteractive apt-get install -y tzdata; dpkg-reconfigure --frontend noninteractive tzdata
RUN apt install -y php php-odbc mdbtools mdbtools-dev

这是我编写的 PHP 代码,以使其能够阅读(由于我不会说 PHP,所以它是一项黑客工作):

<?php
$db = "/working/MYDB.mdb";
$conn = odbc_connect("Driver=MDBTools;DBQ=//$db;UID=;PWD=;",'','');
$rs = odbc_exec($conn,"SELECT * FROM my_table");
odbc_fetch_row($rs);
$foo = odbc_result($rs, "AName");
echo "foo = $foo\n";
echo "DONE\n";
odbc_close($conn);
?>

这可以从命令行使用原始 PHP,使用 LAMP 堆栈可能还有其他特性。如果是这样,请联系我,我会再看看。

© www.soinside.com 2019 - 2024. All rights reserved.