我正在尝试从mysql表中获取值并使用bash将它们写入sqlite3。
当我获取的mysql行值中没有空格时,我的脚本可以正常工作。看起来像是一些逃避问题,但我不太了解bash,我在我的变量($output_line
下面)周围尝试了引号和花括号,但它仍然不起作用。
这是我目前所拥有的:
#!/bin/bash
first_line=0
while read -r output_line; do
if [ $first_line -eq 0 ]
then
((first_line++))
continue
fi
sqlite3 /var/lib/asterisk/mydb.sqlite3 "update mydb set value='"$output_line"' where key='xxx/"$first_line"/xxx';"
((first_line++))
done < <(mysql -u root -p**** -hlocalhost MYDB -e "SELECT name FROM MYTABLE")
我得到的错误是sqlite查询中$output_line
有空格的时候。
我该如何解决这个问题?
答案 0 :(得分:1)
好吧所以我没有任何sqlite3环境,所以我无法测试任何东西,但是从我读到的内容
sqlite3
CLI无法使用预准备语句quote(x)
method可用作缓解SQL注入的另一种方法您应该测试以下代码:
#!/bin/bash
line_number=0
while read -r output_line; do
sqlite3 /var/lib/asterisk/mydb.sqlite3 "update mydb set value=quote('$output_line') where key=quote('xxx/$first_line/xxx');"
((line_number++))
done < <( mysql -u root -p**** -hlocalhost MYDB -e "SELECT name FROM MYTABLE" | tail -n+2 )