PHP 项目在数据库迁移使用 ADB(aliyundb)时发现这个问题,具体错误描述是:
1 | SQLSTATE[HY000]: General error: 1815 [15022, 2020010711034801025210201503151413416] statement type: class com.alibaba.fastsql.sql.ast.statement.SQLSetStatement is NOT supported! (SQL: select * from `users`) |
在排查该问题的过程中,尝试了各种方式,降版本、使用原生语句等,甚至查找 ADB 手册和 Issue 还是无法解决。
1.原因
因为 ADB 兼容 Mysql 但是有些机制还是略有不同,阅读源码后发现比如:ADB 就不能很好的支持本地预处理语句,这也是该异常的原因。
2.解决方案
PHP PDO 链接的属性值PDO::ATTR_EMULATE_PREPARES
需要设置为true
1 | PDO::ATTR_EMULATE_PREPARES => true |