首页 > 解决方案 > 从命令行运行 MySQL UpdateXML 失败

问题描述

我需要从 bash 脚本更新 mysql 表中的 xml,所以当我从命令行尝试此操作时:

mysql -uadmin -p**** -h127.0.0.1 db -e "UPDATE my_table set my_field = updatexml(my_field, '/config/properties/property[@name="search_property"]', '<property name="search_property" value="new_property_value" />') where name='my_xml_record';"

` 我收到以下错误:

第 1 行的错误 1105 (HY000):XPATH 错误:不支持比较两个节点集:'=search_property]'

但是,当我直接在 mysql 控制台中运行相同的功能时,它可以工作。

mysql> UPDATE my_table set my_field = updatexml(my_field, '/config/properties/property[@name="search_property"]', '<property name="search_property" value="new_property_value" />') name='my_xml_record';

查询正常,1 行受影响(0.01 秒)匹配行:1 更改:1 警告:0

这里可能有什么问题,这个错误对我来说没有意义,因为它在 mysql 控制台中成功执行。

标签: mysqlupdatexml

解决方案


我在这里发现了问题,错误非常具有误导性,发生的事情是这是在运行一个 bash 脚本

eval $command_written_above

这实际上会误解引号并删除单引号字段中的双引号。IE

mysql -uadmin -p**** -h127.0.0.1 db -e "UPDATE my_table set my_field = updatexml(my_field, '/config/properties/property[@name=search_property]', '<property name=search_property value=new_property_value />') where name='my_xml_record';"

请注意,以前的双引号字符串不再是双引号。当我删除 eval 并将其作为 mysql 命令运行时,它运行成功。


推荐阅读