为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:8
【操作系统】:centos 8
【CPU】:Intel(R) Xeon(R) Platinum 8269CY CPU @ 2.50GHz
【问题描述】*:
PHP 是7.3.33非线程安全,使用PDO_DM驱动。
数据库初始化时已使用 参数 case_sensitive=n 大小写不敏感
兼容mysql模式:sp_set_para_value(2,'COMPATIBLE_MODE',4);
在PHP代码里查询会报错
[2023-10-15 13:17:25]
SQLSTATE[HY000]: General error: -2007 第 1 行, 第 98 列[AND]附近出现错误:
语法分析出错 (dpi_prepare[4294965289] at /home/test/yx/trunk/dm_php//pdo7/dm_driver.c:404) In File /data/wwwroot/default/inc/dm.class.php Line:71
SQL语句: SELECT COUNT(1) AS CC FROM p8_config WHERE system=:system and module=:module and type=:type and k=:k
#0 /data/wwwroot/default/inc/dm.class.php(71): PDO->prepare('SELECT COUNT(1)...')
#1 /data/wwwroot/default/inc/dm.class.php(324): p8_dm->execute('SELECT COUNT(1)...', Array)
在disql是可以正常查询的
disql V8
SQL> SELECT COUNT(1) AS CC FROM p8_config WHERE system='core' and module='' and type='serialize' and k='modules';
LINEID CC
---------- --------------------
1 1
used time: 1.061(ms). Execute id is 6800.
SQL>
怀疑PDO_DM不支持 system=:system and module=:module 这种PDO式语法的SQL,不知为什么
帮忙看看是什么问题
在21年和23年2个版本测试了type关键字是否执行正常,21年的版本中type还未设置为关键字,后续的版本中type在达梦调整为关键字,所以21年适配中该语法执行没问题,在23年的版本中执行后会出现语法分析出错的问题,可以通过屏蔽关键字来规避该问题,目前已经协助解决。设置关键字的方式如下(推荐方法二)
方法一:通过设置参数参数屏蔽关键字
设置EXCLUDE_RESERVED_WORDS参数值为要屏蔽的关键字,重启数据库实例生效。
方法二:通过配置dm_svc.conf文件来屏蔽关键字
新增KEYWORDS=(type) ##多个关键字以逗号隔离
type 关键词位置。如果没用到type语法,可以屏蔽掉。
同事问过我了