我正在尝试从 bash 脚本将 json 文件发送到我的 MySQL 数据库。据我所知,json 文件部分的语法是正确的,但有一个我无法理解的奇怪错误。
我运行以下代码:
EXPORT_DIR="sunum"
file_name="105069_2024-03-19_20:09:06.mp4"
IFS='.'
read -ra ADDR <<< ${file_name}
report_filename=${ADDR[0]}".json"
report_dir="${EXPORT_DIR}/${report_filename}"
echo "${report_dir}"
VAR=$(cat "${report_dir}")
echo "${VAR}"
echo "${file_name}"
mysql --user="sql_vestelrecog_" --password="H76X53WN2ZaaJY84" --database="sql_vestelrecog_" \
--port="3306" --execute="UPDATE media SET rapor = "${VAR}" WHERE file_name = "${file_name}""
并得到以下错误:
错误 1044 (42000):用户“sql_vestelrecog_”@“localhost”访问数据库“mp4”被拒绝
我的数据库名称 sql_vestelrecog_ 及其已定义,为什么文件名的扩展名(mp4)成为数据库名称并且我收到此连接错误??
您应该将变量放在单引号中,假设它们包含字符串(
$file_name
显然是一个字符串)。
mysql --user="sql_vestelrecog_" --password="H76X53WN2ZaaJY84" --database="sql_vestelrecog_" \
--port="3306" --execute="UPDATE media SET rapor = '${VAR}' WHERE file_name = '${file_name}'"
请注意,将变量直接替换为 SQL 会使您容易遭受 SQL 注入。如果您可以使用支持预准备语句的编程语言(例如 PHP 或 Python),而不是从
bash
进行查询,那就更好了。