PHP7.4 和 firebird/interbase:ibase_connect()、ibase_query() 调用未定义函数

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

我正在处理一个遗留的 firebird 数据库,但似乎无法让它与 PHP7.4 一起工作。 PHP7.4中不再提供interbase扩展,我只能安装PDO_FIREBIRD。

PECL 上也没有发布。 https://pecl.php.net/package/interbase

有任何关于如何使其与 7.4 一起工作的提示吗?

php firebird pecl interbase php-7.4
4个回答
2
投票

最近版本的 PHP 确实不再随 interbase 包一起提供。相反,您可以使用 Firebird PHP 驱动程序,它是 interbase 包的一个分支和持续开发。


1
投票

好吧,我在处理旧版 Firebird 数据结构时遇到了一些警告。

简单来说,我必须解决两个广泛的问题:

1 - 将客户端库与数据集磁盘结构 (ODS) 相匹配

每个 Firebird 版本都支持有限范围的磁盘结构 (ODS)。以下链接有关于此主题的非常好的参考:

https://ib-aid.com/en/articles/all-firebird-and-interbase-on-disk-struct-ods-versions

ADODB 和 PHP PDO 是主机系统中客户端库的抽象层。 PHP 7.4 仅支持 FB 3.0 及更高版本的客户端。因此,有必要将抽象层与可用的客户端库相匹配。 对于 FB 2.5 以下的数据集:

磁盘结构应达到 ODS 11;
  • 客户端版本应达到FB 2.5.9(推荐);
  • PHP 引擎应该达到 7.3(7.1 已经有问题);
  • 旧功能
  • ibase_
  • fbird_
    应该可以正常工作;
    ADODB、PHP PDO 等应该
  • 不能
  • 工作。
  • 对于从 FB 3.0 开始的数据集:

磁盘结构应为ODS 12或更高;
  • 客户端版本必须为FB 3.0或更高版本;
  • PHP 引擎应为 7.4 或更高版本;
  • 旧功能
  • ibase_
  • fbird_
    应该
    工作; ADODB、PDO 等应该可以正常工作。
2 - 匹配客户端和服务器平台及参数

对于任何客户端和服务器组合:

客户端和服务器应共享同一平台,32位或64位;
  • 连接应使用 SQL 方言 1 或 3,具体取决于旧数据集的使用情况;
  • 字符编码应为 WIN-1251(旧版)或 UTF-8(新默认值)。
意见

根据我的经验,很难将旧版 FB 连接“强制”到最新的 PHP 引擎中。我认为 Linux 系统更具挑战性,因为

libgcc

从版本 5 到版本 6 有不同的入口点(我猜......),并且

musl
不被支持。
Windows 中的情况更加灵活,因为 

fbclient.dll

是连接所需的唯一客户端库,并且它依赖于多年来保持相同入口点的 Win32 库。

我建议将数据集升级到 Firebird 4 并使用更新的扩展和客户端。但是,如果这不是一个选项,则应从主机操作系统通过 PHP 引擎,直到 FB 客户端来简化降级。

不幸的是,我相信“这就是路。”

祝一切顺利。


0
投票

没有这些 dll,它就无法工作,由于某种未知的原因,新版本的 xampp 丢失了。


0
投票

为此,请使用:

    默认php_pdo_firebird.dll,php自带就可以了。只需在 php.ini 中取消注释即可
  1. 下载旧版 Firebird 服务器。
  2. http://www.firebirdsql.org/en/discontinued-versions/

    就我而言,我使用的是 v.2.1。 下载 .zip 版本,32 / 64 位 - 与您的 php、apache 相同...

  3. 解压zip文件,在bin文件夹中有instclient实用程序。它将 fbclient.dll 和 gds32.dll 添加到系统文件夹。 只需从 cmd 调用(以管理员身份):
  4. 安装客户端

安装客户端

之后您可以检查是否安装正确:

instclient q f

安装客户端q g

    添加到服务文件(%windir%\System32\drivers tc\services.): gds_db 3050/tcp
  1. 重新启动Apache,PHP应该可以调用如下:
  2. $dsn =“firebird:dbname=111.111.111.111:C:/aaaa/bbbb.GDB;”

$conn = new \PDO($dsn, $user, $pass, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);

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