mysql - Bash mysql 查询 : ERROR 1054 (42S22) 'file name' in 'field list'

标签 mysql bash

我发现了许多与未知列名称类似的问题,但没有一个报告与此相同,我迷路了:

第 1 行的错误 1054 (42S22):“字段列表”中的未知列“tad.sh”

'tad.sh' 是 bash 脚本本身的名称。

代码:

#!/bin/sh
FPATH="/home/bermans/CHIT/"
DATE="$(date +"%d-%m-%Y")"
FNAME="transfer-authority.csv"
HEADS="\"Time\", \"Urgent\", \"Initials\", \"Transfer from\", \"From description\",    \"Transfer to\", \"To description\", \"Sum\", \"In respect of\""

params="-u #### -p#### chit"
s1="SELECT "
s2=" UNION"
s3=" SELECT *"
s4=" FROM \`transfer-authority\`"
s5=" WHERE Time > DATE_SUB( NOW( ) , INTERVAL 24 HOUR )"
s6=" INTO OUTFILE "
s7=" FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' ESCAPED BY '\"'"
s8=" LINES TERMINATED BY '\n'"
selectend=";"

echo $s1$HEADS$s2$s3$s4$s5$s6\'$FPATH$DATE$FNAME$\'$s7$s8$selectend | mysql $params

我希望每天为过去 24 小时内的条目创建一个带有标题的 CSV 文件。我打算将其作为 cronjob 运行,然后通过电子邮件发送并删除该文件。

非常感谢任何帮助。

谢谢

最佳答案

删除| mysql $params echo 语句的一部分,你会大吃一惊;-)

问题是 s3="SELECT *" 被注入(inject)到 echo 语句中并且 * 被 shell 解释为通配符。这与您在控制台中键入此内容相同:

echo *

尝试对 echo 参数加双引号(您将不再需要转义单引号):

echo "$s1$HEADS$s2$s3$s4$s5$s6'$FPATH$DATE$FNAME$'$s7$s8$selectend"

关于mysql - Bash mysql 查询 : ERROR 1054 (42S22) 'file name' in 'field list' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14382543/

相关文章:

mysql - laravel中如何将图片上传到数据库

linux - Bash - 为什么 sfdisk 在此脚本中不起作用?

bash - shell脚本换桌面壁纸

Bash - 对字符串列表进行排序

linux - Bash,是隐式引用的子shell输出

mysql - MySQL 中 Unix 时间的一年

php - 提交 php 表单时出现 "You have an error in your SQL syntax"错误

php - 页面加载时显示查询结果

MySQL RDS存储过程更新查询速度慢

linux - 如何将多个链接下载到一个文件中?