@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 подобный финт?
  • Вопрос задан
  • 270 просмотров
Пригласить эксперта
Ответы на вопрос 2
@AndGroup
На мой взгляд было бы логичнее использовать такую конструкцию для выполнения запроса:
#!/bin/bash
ixdate=$(date +%s)
CPUCurFreq=$(xenpm get-cpufreq-states | grep "current frequency")
XENLIST=$(xl list)

MyUSER="ServerInfo"
MyPASS="sosiskasardelka"
MyHOST="172.16.0.3"
MYSQL="$(which mysql)"

$MYSQL -u $MyUSER -h $MyHOST -p$MyPASS -e "INSERT INTO serverInfo.serverBoard ('id', 'name', 'update', 'data') VALUES (NULL, 'cpucurfreq', "$ixdate", "$CPUCurFreq");"
$MYSQL -u $MyUSER -h $MyHOST -p$MyPASS -e "INSERT INTO serverInfo.serverBoard ('id', 'name', 'update', 'data') VALUES (NULL, 'xenlist', $ixdate, $XENLIST);"

echo $CPUCurFreq
echo $XENLIST


Должно быть правильно как с двойными кавычками, так и без них, потому пишу оба варианта.
Ответ написан
@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]$
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы