从命令行运行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

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

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命令运行时,它成功地运行了。

最新更新