mysql - 从命令行运行 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 控制台中成功执行。
解决方案
我在这里发现了问题,错误非常具有误导性,发生的事情是这是在运行一个 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 命令运行时,它运行成功。
推荐阅读
- c++ - 尽管在 CMake 中指定了库,但未定义的引用错误(与 libtorch 链接的问题(C++11 ABI?)
- reactjs - 在 React-Native 中将数据从一个屏幕传递到另一个屏幕
- html - 更改输入文本的背景,但不更改整个输入字段的背景
- c# - Edge 中的 C# MVC(替换 Internet Explorer 后)日期错误
- bootstrap-4 - Bootstrap 4-如何根据 ASC/DESC 对带有更改颜色的箭头图标的表格进行排序
- vue.js - vue.js - 无法更改消息的状态
- linux - sed 用于包含字符串的特定行
- database - 从 oracle DMP 文件中导出数据
- python - 通过动态导入动态调用不同的 Python 文件
- huggingface-transformers - 使用 hugginface 转换器时,有没有办法在波束搜索上设置概率阈值?