mysql++ запрос терпит неудачу

Я новый пользователь mysql++, ищу некоторые указатели (каламбур).

Проблема: мое обновление не удается.

Соединение открыто. Предыдущее утверждение, которое использует соединение, работает.

Я уверен, что запись, которую я пытаюсь обновить, существует. Я могу видеть это с помощью инструментов запросов MySQL. Я уверен, что CustomerId правильный.

     // declaration of the customer id
     uint32_t CustomerId;

Почему это не удается обновить?

   mysqlpp::Connection conn( true );
   try
   {
      if ( conn.connect( db_rw.Name, db_rw.Host, db_rw.User, db_rw.Password ) )
      {

         // *snip*  insert code here works fine.

         // this query fails
         mysqlpp::Query query = conn.query( "UPDATE customer SET AccountName=%2q, Active=%3, Password=%1 WHERE CustomerId=%0" );
         query.parse();
         mysqlpp::SQLQueryParms parms;
         parms.push_back( mysqlpp::sql_int( CustomerId ) );
         parms.push_back( mysqlpp::sql_blob( data, sizeof(data) ) ); //<- 16 byte binary blob
         parms.push_back( mysqlpp::sql_varchar( widget.AccountName->text().toAscii().data() ) );  // string
         parms.push_back( mysqlpp::sql_bool( widget.ActiveCheckBox->checkState() == Qt::Checked ? 1 : 0 ) );  // 
         mysqlpp::SimpleResult res = query.execute( parms );
      }
   }

Если я отключаю исключения для соединения, оно молча терпит неудачу (метод result.info() ничего не возвращает).

если я включаю исключения на seg ошибки при попытке преобразовать в строку:

std::string Query::str(SQLQueryParms& p)
{
    if (!parse_elems_.empty()) {
        proc(p);
    }

    return sbuffer_.str();
}

2 ответа

Решение

Было несколько вопросов.

Библиотека не экранирует двоичные данные правильно.

Если пользователь, связанный с подключением, не имеет разрешения на обновление, библиотека будет аварийно завершать работу, а не генерировать исключение.

Уоррен избил меня до ответа в списке рассылки, но для потомков:

BLOB данные (Password) нужно процитировать и избежать.

Использование SSQLS вместо шаблонных запросов обрабатывает это автоматически.

http://tangentsoft.net/mysql++/doc/html/userman/tutorial.html

Другие вопросы по тегам