【问题标题】:MySql query fails when the shell variable contains ampersand当shell变量包含&符号时,MySql查询失败
【发布时间】:2019-05-08 11:40:56
【问题描述】:

我在 shell 脚本中有一个包含“&”的表变量。当我尝试在 shell 脚本中更新表时,查询失败。

我尝试了几个选项来用单引号、双引号、反引号'`'来包含表名(反引号将其中的语句视为 shell 的命令)

还尝试设置以下选项: 设置定义 设置转义

#!/bin/bash

Table='City_&_District'
mysql --user=$DB_USER --password=$DB_PASSWD $DB_NAME << EOF
update $Table set Actual='$Actual', Normal='$Normal', Dep_Per='$Dep', Cat='$Cat' where Date='$Date';
EOF

如果我输入表名称为:'City',则查询成功 如果我将表名输入为:'City_&_District',则查询失败

第 2 行的 ERROR 1064 (42000):您的 SQL 语法有错误; 检查与您的 MySQL 服务器版本相对应的手册 在 '&_District set Actual='0.4', Normal='0.1', Dep_Per='340%', Cat='LE' where Date='' at line 1

【问题讨论】:

标签: mysql shell


【解决方案1】:

尝试使用带有反引号的反斜杠,因为反引号在 shell 中被视为命令替换,它们在双引号字符串中进行评估。

你需要避开反引号

"\`City_&_District\`"

【讨论】:

  • 是的,我会试试的
【解决方案2】:

使用可以在表名周围使用`(不是'或")

【讨论】:

    【解决方案3】:

    在反引号之前添加反斜杠在表变量中起作用

    【讨论】:

      猜你喜欢
      • 2012-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-07
      • 1970-01-01
      相关资源
      最近更新 更多