php - PDO Firebird 中的异常准备 Magento 集成中的查询

标签 php magento pdo prepared-statement firebird

我正在开发的项目直接通过 php firebird pdo 扩展与客户的 ERP* 集成,以获取品牌、类别、产品、产品价格等信息。

数据库不在运行脚本的服务器上。如果这很重要,与数据库的连接可以通过 VPN 连接进行。

首先,脚本要求 Firebird 在名为 SYS$ACTION_DS 的系统表中进行一些查询,Firebird 返回此查询:

execute block (
    MARK_AS_PROCESSED DM_BOOL = :MARK_AS_PROCESSED,
    EXTENAL_SYSTEM_ID DM_123 = :EXTENAL_SYSTEM_ID)
returns (
    ID bigint,
    BRAND_NAME$1 DM_STR30,
    BRAND_NAME$2 DM_STR30,
    BRAND_PARENT_REF bigint,
    OP varchar(1))
as
DECLARE VARIABLE SL_ID BIGINT;
begin
  FOR SELECT SL.ID, SL.OPERATION, SL.TABLE_ID_REF, N.BRAND_NAME$1, N.BRAND_NAME$2, N.BRAND_PARENT_REF
      FROM  SYS$EXT_LOG SL
      LEFT JOIN NOM$BRANDS N ON (SL.TABLE_ID_REF = N.ID)
      WHERE (SL.PROCESSED = 0) AND (SL.EXTERNAL_SYSTEM_ID = :EXTENAL_SYSTEM_ID) AND (SL.TABLE_NAME = 'NOM$BRANDS')
      ORDER BY SL.ID
      INTO :SL_ID, :OP, :ID, :BRAND_NAME$1, :BRAND_NAME$2, :BRAND_PARENT_REF
  do begin
    suspend;
    if (MARK_AS_PROCESSED = 1) then
      update SYS$EXT_LOG SL set SL.PROCESSED = 1, SL.PROCESSED_ON = current_timestamp where SL.ID = :SL_ID;
  end
end

在该脚本尝试准备 PDO 语句但准备抛出异常之后:Dynamic SQL Error SQL error code = -104 Token unknown - line 18, column 12 ?

我找不到为什么会出现此错误,但在实时服务器上一切正常,但在我的机器上却不行。我在我的机器上尝试了几个 php 版本(5.6、7.0、7.1)但没有任何效果,在实时服务器上 php 版本是 5.5 但我找不到与 PDO 或 Firebird PDO 相关的 5.5 和 5.6 之间的任何变化。

附加信息: Firebird 服务器版本:2.5.5.26

最佳答案

目前,PDO Firebird 驱动程序通过将 :param 替换为 ? 来对命名参数进行简单的原始替换,因为 FB 不支持命名参数。更多信息在 PDO FB driver source

不幸的是,这不适用于“执行 block ”语句。我希望并努力在未来解决这个问题。这在 FB 论坛中进行了讨论,以添加命名参数支持,也在 PHP 开发论坛和 tracker 中进行了讨论。以改进驱动程序。

目前,作为变通方法,您可以使用存储过程。

关于php - PDO Firebird 中的异常准备 Magento 集成中的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47243309/

相关文章:

php - 能否在单个 MySQL 事务中将一个查询的结果用于另一个查询?

php - 如何使用 Laravel Passport 在 API 中正确实现 OAuth?

javascript - AngularJS渲染更新记录+Laravel后端

从点文件生成 xdot 文件的 PHP 库

php - Facebook,我应该在 SQL 中使用 Array 还是不同的行来表示喜欢的帖子

php - PDO异常 “could not find driver”

javascript - 如何使用动态名称更新 Json 对象

Javascript 在使用 <button> 时关闭窗口

jquery - jQZoom:remove()和img src更改后的innerzoom问题

php - 使用 PDO 搜索