设置是 Debian(或者更准确地说,php:8.1-apache docker 映像是基于 Debian 的。)问题在 php:8.1[...] 中并不新鲜,但也出现在 php:8.0[...]
我安装了 odbcinst1debian2、libodbc1、odbcinst 和 unixodbc 软件包。
ODBC 及其数据源似乎在命令行中正确设置,我有一个创造性地命名为“testodbc1”的数据源工作......
我可以验证这是否有效,因为运行“isql -v testodbc1”有效,并且我可以在其中运行命令行 SQL。
所以,我相当有信心问题出在 PHP->PDO->ODBC 链中,而不是在 ODBC 和(远程)数据库服务器之间。
我安装了 PHP odbc 和 pdo_odbc 扩展。
当我尝试使用正确的 ODBC 连接器、正确的用户名但错误的密码在 PHP 中进行更正时,我得到了所需的错误。
但是,当我使用正确的密码时,浏览器会告诉我 Apache 失败,并且服务器日志中出现了段错误。
重现所需的 PHP 代码非常简单:
error_log("HERE1");
$dsn = "odbc:testodbc1";
error_log("HERE2");
$conn = new \PDO($dsn, "<myusername>", "<mypassword>");
error_log("HERE3");
这给出了控制台输出:
[php:notice] [pid 22] [client 172.18.0.1:60572] HERE1
[php:notice] [pid 22] [client 172.18.0.1:60572] HERE2
[core:notice] [pid 1] AH00052: child pid 20 exit signal Segmentation fault (11)