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