Как вставить двоичный std :: string в BLOB - PullRequest
5 голосов
/ 09 апреля 2009

У меня есть двоичный std :: string, и мне нужно вставить его в BLOB (MySQL), используя простой слой данных, который у меня есть. Итак, мне нужно выполнить запрос: ExecuteSQL((LPTSTR)strQ).

Когда я создаю эту строку запроса (strQ), я не могу ничего добавить в строку после добавления этой двоичной строки - это просто замечательно, если завершено, и ничего нельзя добавить. Я не хочу использовать mysql_real_escape_string, потому что я хочу сохранить его не только для MySQL.

Кто-нибудь, чтобы помочь ПОЖАЛУЙСТА !!!

1 Ответ

2 голосов
/ 09 апреля 2009

Если у вас есть код, который выглядит примерно так:

std::string s = ...      // populate string somehow
ExecuteSQL( (LPCSTR) s );

Тогда у вас есть несколько проблем. К сожалению, актерский состав не сработает. В C ++ всякий раз, когда вы используете приведение, вы почти наверняка делаете что-то неправильное, что нарушит ваш код. Вам нужно создать строку с нулевым символом в конце, используя функцию-член std :: string c_str ():

ExecuteSQL( s.c_str() );

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

Редактировать: Подробнее о том, как связать параметр с оператором MySQL, см. http://dev.mysql.com/doc/refman/5.1/en/mysql-stmt-bind-param.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...