Задать вопрос
@alexdora
Топ-менеджер

Как решить проблему зеркалирования кавычек SQL-запроса?

Есть скрипт:

#!/bin/bash
ixdate=$(date +%s)
CPUCurFreq=$(xenpm get-cpufreq-states | grep "current frequency")
XENLIST=$(xl list)

mysql -h 172.16.0.3 -u ServerInfo -psosiskasardelka << EOF
INSERT INTO serverInfo.serverBoard ('id', 'name', 'update', 'data') VALUES (NULL, 'cpucurfreq', "$ixdate", "$CPUCurFreq");
INSERT INTO serverInfo.serverBoard ('id', 'name', 'update', 'data') VALUES (NULL, 'xenlist', "$ixdate", "$XENLIST");
EOF

echo $CPUCurFreq
echo $XENLIST

Понятное дело, что он не работает т.к переменные $XENLIST и $CPUCurFreq ломают SQL-запрос. К примеру, в PHP этот вопрос МОЖНО методом escape_string для подготовки запроса. А как сделать в SH подобный финт?
  • Вопрос задан
  • 276 просмотров
Подписаться 1 Оценить Комментировать
Ответ пользователя abcd0x00 К ответам на вопрос (2)
@abcd0x00
Общий принцип - сделать функцию для подготовки нужного вывода
#!/bin/bash

func()
{
    local tab date freq
    local text

    tab=$1
    date=$2
    freq=$3

    text="INSERT INTO $tab ('id', 'name', 'update', 'data')"
    text="$text VALUES (NULL, 'cpucurfreq', '$date', '$freq');"

    echo "$text"
}

cat -n <<EOF
`func "a" "b  b" "c  c"`
`func "a" "e  e" "f  f"`
EOF

exit 0


Вывод
[guest@localhost sh]$ ./t.sh 
     1  INSERT INTO a ('id', 'name', 'update', 'data') VALUES (NULL, 'cpucurfreq', 'b  b', 'c  c');
     2  INSERT INTO a ('id', 'name', 'update', 'data') VALUES (NULL, 'cpucurfreq', 'e  e', 'f  f');
[guest@localhost sh]$
Ответ написан
Комментировать