crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Как добавлять в базу текст со спецсимволами?
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
RazrFalcon Дата 23.4.2011, 18:54
 
Цитата(silver47 @ 23.4.2011, 18:46) *
Добавляю через запрос вида
query.prepare("INSERT INTO [sometable] (NAME) VALUES (:name)");
query.bindValue(":name", "Something'Something");

Это помогло, спасибо.
Хотя полчаса назад, такая же строка, не срабатывала :huh:

PS: а где вообще все команды, для управление БД, описаны. Я не про Qt-е, а про
INSERT INTO [sometable] (NAME) VALUES (:name)
И тд.

UPD: до этого не работало, потому что выдранная из форму строка была такой:
query.prepare("insert into tags values(artist, title, album) "
                      "VALUES (:artist, :title, :album)");
MoPDoBoPoT Дата 23.4.2011, 18:47
  Вообще-то, в SQL апостроф экранируется апострофом, то есть должно быть примерно так:
...
QString tags("insert into tags values('Something', 'Something''Something', 'Something')");
...

В данном случае в запрос передаются константные строки (твои), поэтому можно обойтись простым экранированием, ну а вообще, лучшей практикой является использование связываемых переменных (биндинг), которые исключают возможные SQL-инъекции.
silver47 Дата 23.4.2011, 18:46
  Думал что нужно в Qt заэкранировать. Сейчас только что проверил на своей SQLite никаких проблем не имею с добавлением строки вида Something'Something

Добавляю через запрос вида
query.prepare("INSERT INTO [sometable] (NAME) VALUES (:name)");
query.bindValue(":name", "Something'Something");
RazrFalcon Дата 23.4.2011, 18:39
  Пробовал, не помогает.
silver47 Дата 23.4.2011, 18:38
  Для экранирования воспользуйтесь символом \
RazrFalcon Дата 23.4.2011, 18:10
 
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
  db.setDatabaseName(":memory:");
  if (!db.open()) {
      QMessageBox::critical(0, qApp->tr("Cannot open database"),
          qApp->tr("Unable to establish a database connection.\n"
                   "This example needs SQLite support. Please read "
                   "the Qt SQL driver documentation for information how "
                   "to build it.\n\n"
                   "Click Cancel to exit."), QMessageBox::Cancel);
  }
  QSqlQuery query;
  query.exec("create table tags (artist text, "
                                "title text, "
                                "album text)");
  QString tags("insert into tags values('Something', 'Something'Something', 'Something')");
  query.exec(tags);

  model = new QSqlRelationalTableModel(this);
  model->setTable("tags");
  model->select();

  QTableView *view = new QTableView;
  view->setModel(model);
  view->resizeColumnsToContents();
  view->resize(700,400);
  view->show();

Из-за наличия ', вся строка не отображается в таблице.
Как экранировать, что ли, все спецсимволы, из-за которых могут быть такие сбои.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 16:29