Bash sqlite3:错误:选项太多了

时间:2017-05-11 15:05:12

标签: bash sqlite

我正在尝试从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有空格的时候。 我该如何解决这个问题?

1 个答案:

答案 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 )