The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"экранирование кавычек в sql-запросе"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"экранирование кавычек в sql-запросе"  +/
Сообщение от GHopper email(ok) on 09-Июл-08, 08:20 
Здравствуйте!
Есть некоторый sh-скрипт:
...
echo "select field FROM ttt WHERE name='$name';" | mysql --user=admin --host=localhost --database=test --password=**** | grep -v 'field'
...

Все работает, но до тех пор, пока в переменной $name не появится символ "'". Как обойти проблему?

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "экранирование кавычек в sql-запросе"  +/
Сообщение от Vitaly_loki (??) on 09-Июл-08, 08:50 
>Здравствуйте!
>Есть некоторый sh-скрипт:
>...
>echo "select field FROM ttt WHERE name='$name';" | mysql --user=admin --host=localhost --database=test
>--password=**** | grep -v 'field'
>...
>
>Все работает, но до тех пор, пока в переменной $name не появится
>символ "'". Как обойти проблему?

Обратный слеш "\"

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "экранирование кавычек в sql-запросе"  +/
Сообщение от GHopper email(ok) on 09-Июл-08, 09:00 
>[оверквотинг удален]
>>Есть некоторый sh-скрипт:
>>...
>>echo "select field FROM ttt WHERE name='$name';" | mysql --user=admin --host=localhost --database=test
>>--password=**** | grep -v 'field'
>>...
>>
>>Все работает, но до тех пор, пока в переменной $name не появится
>>символ "'". Как обойти проблему?
>
>Обратный слеш "\"

ну так понятно, что обратный слеш. Как его поставить туда? В PHP есть функция addslashes(), а вот на shell... Тут-то функции такой нету. А как замену в строке сделать - не могу придумать.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "экранирование кавычек в sql-запросе"  +/
Сообщение от phpcoder email(??) on 09-Июл-08, 09:24 
>А как замену в строке сделать - не могу придумать.

Например, так:

[c0der@xxx ~]$ echo "string with ' symbol" | sed "s|'|\\\'|g"
string with \' symbol

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "экранирование кавычек в sql-запросе"  +/
Сообщение от GHopper email(ok) on 09-Июл-08, 11:16 
>>А как замену в строке сделать - не могу придумать.
>
>Например, так:
>
>[c0der@xxx ~]$ echo "string with ' symbol" | sed "s|'|\\\'|g"
>string with \' symbol

А вот какая загагулина:
echo $line | sed "s|'|\\\'|g" - работает норм;
var=`echo $line | sed "s|'|\\\'|g"` - присваевает переменной var значение $line (sed не выполняется).
Ничего не понимаю...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "экранирование кавычек в sql-запросе"  +/
Сообщение от zbl on 09-Июл-08, 11:54 
>echo $line | sed "s|'|\\\'|g" - работает норм;
>var=`echo $line | sed "s|'|\\\'|g"` - присваевает переменной var значение $line (sed
>не выполняется).
>Ничего не понимаю...

Надо так:
line="kfkfkl ' jfjfkfkf"
var=$(echo $line | sed "s|'|\\\'|g")
echo $var
выведется:
kfkfkl \' jfjfkfkf

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "экранирование кавычек в sql-запросе"  +/
Сообщение от zbl on 09-Июл-08, 12:03 
>var=`echo $line | sed "s|'|\\\'|g"` - присваевает переменной var значение $line (sed
>не выполняется).
>Ничего не понимаю...

Тут дело в двух парах ковычек: одна ``, другая "".
Если `` обязательны вместо $(), то нужно писать так:
var=`echo $line | sed "s|'|\\\\\'|g"`
Только пять слешей будут работать правильно.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "экранирование кавычек в sql-запросе"  +/
Сообщение от GHopper email(ok) on 09-Июл-08, 12:06 
спасибо, добрые люди! ;)
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "экранирование кавычек в sql-запросе"  +/
Сообщение от sasha (??) on 20-Июл-09, 18:19 
>>var=`echo $line | sed "s|'|\\\'|g"` - присваевает переменной var значение $line (sed
>>не выполняется).
>>Ничего не понимаю...
>
>Тут дело в двух парах ковычек: одна ``, другая "".
>Если `` обязательны вместо $(), то нужно писать так:
>var=`echo $line | sed "s|'|\\\\\'|g"`
>Только пять слешей будут работать правильно.

Объясни, пожалуйста, почему именно пять слешей?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру