Russian Qt Forum

Qt => Базы данных => Тема начата: phpCoder от Май 08, 2015, 11:41



Название: Экранировка символов
Отправлено: phpCoder от Май 08, 2015, 11:41
Как в Qt заэкранировать строку текста для вставки в SQL-запрос? Наподобие изветной функции из PHP.
Всякие бинды не интересуют.


Название: Re: Экранировка символов
Отправлено: gil9red от Май 08, 2015, 11:46
Как в Qt заэкранировать строку текста для вставки в SQL-запрос? Наподобие изветной функции из PHP.
Всякие бинды не интересуют.

Руками?

А чем такой способ не нравится? ???
Код
C++ (Qt)
   QSqlQuery query;
   query.prepare("update person set firstname = ? where id = ?");
   query.addBindValue(firstName);
   query.addBindValue(personId);
   return query.exec();
 

Код
C++ (Qt)
   QSqlQuery query;
   query.prepare("INSERT INTO person (id, forename, surname) "
                 "VALUES (:id, :forename, :surname)");
   query.bindValue(":id", 1001);
   query.bindValue(":forename", "Bart");
   query.bindValue(":surname", "Simpson");
   query.exec();
 


Название: Re: Экранировка символов
Отправлено: phpCoder от Май 08, 2015, 11:51
Потому что есть функция mysql_real_escape_string, которая пишется в одну строку - это первое. Второе - запрос у меня меня собирается из разные мест программы и всякие бинды тут не помогут.

PS Ну не может же быть Qt таким ущербным, что даже функции для экранировки не имеет?


Название: Re: Экранировка символов
Отправлено: Bepec от Май 08, 2015, 12:08
Эта функция имеется на всех форумах, думаю на этом форуме темка такая тоже есть.

PS так то экранирование для различных бд должно быть разное, не? Могу и ошибаться, но запрос допустим access'у будет экранироваться иначе, чем SQLite.



Название: Re: Экранировка символов
Отправлено: lit-uriy от Май 09, 2015, 19:25
... запрос у меня меня собирается из разные мест программы и всякие бинды тут не помогут.
В этом и проблема, а не в отсутствии в Qt специальной функции.

Наведи порядок в коде и не собирай запросы вручную.


Название: Re: Экранировка символов
Отправлено: carrygun от Май 12, 2015, 05:37
PS так то экранирование для различных бд должно быть разное, не?

Именно, мне даже по работе приходится работать с такой БД, что в ней даже нет экранирования вообще. Экранировать руками это печально, мало ли что в строки попадет. Поэтому только бинд, не иначе.