更新 mysql 数据库时出现错误 1044 (42000)

问题描述 投票:0回答:1

我正在尝试从 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)成为数据库名称并且我收到此连接错误??

mysql bash
1个回答
1
投票

您应该将变量放在单引号中,假设它们包含字符串(

$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
进行查询,那就更好了。

© www.soinside.com 2019 - 2024. All rights reserved.