MySQL 错误:'Only constant XPATH queries are supported' 解决方法
错误:'Only constant XPATH queries are supported' 的原因
在 MySQL 中,updatexml 函数只能处理常量的 XPATH 查询,这意味着您不能在 updatexml 函数中使用动态生成的 XPATH 表达式。
问题代码:
SELECT COUNT(1) FROM ( SELECT COUNT(1) FROM mi_users WHERE id BETWEEN 1 AND 200 AND updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=0x616161 limit 0,1),0x7e),1) GROUP BY network_id ) a
错误原因:
在上面的代码中,updatexml 函数的参数 concat(0x7e,(select table_name from information_schema.tables where table_schema=0x616161 limit 0,1),0x7e) 包含了一个子查询,该子查询用于获取 information_schema.tables 表中的表名,这是一个动态生成的 XPATH 表达式,因此导致了错误。
解决方法:
-
使用其他方式获取所需的信息:
- 在代码中手动指定所需表的名称。
- 使用其他函数来获取所需的信息,例如
information_schema数据库中的TABLES表。
-
使用其他函数替代
updatexml函数:- 如果您需要更新 XML 文档,可以使用其他函数,例如
extractvalue、update_xml或replace函数。
- 如果您需要更新 XML 文档,可以使用其他函数,例如
示例:
SELECT COUNT(1) FROM ( SELECT COUNT(1) FROM mi_users WHERE id BETWEEN 1 AND 200 AND table_name = 'your_table_name' GROUP BY network_id ) a
注意:
- 确保您了解
updatexml函数和 XPATH 查询的安全性问题,以及如何避免 SQL 注入攻击。 - 如果您需要使用动态 XPATH 查询,请考虑使用其他方法或函数来实现。
原文地址: https://www.cveoy.top/t/topic/nKTx 著作权归作者所有。请勿转载和采集!