编程语言
首页 > 编程语言> > php-Magento集成中PDO Firebird中的查询准备异常

php-Magento集成中PDO 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错误代码= -104令牌未知-第18行,第12列?

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

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

解决方法:

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

不幸的是,这不适用于“执行块”语句.我希望并做出一些努力以在将来解决此问题.在FB论坛,增加命名参数支持,PHP开发论坛和tracker改进驱动程序中对此进行了讨论.

目前,作为解决方法,您可以使用存储过程.

标签:magento,prepared-statement,firebird,php,pdo
来源: https://codeday.me/bug/20191110/2015033.html