возникли проблемы с вставкой нескольких значений в таблицу MySQL DB с помощью C ++ - PullRequest
1 голос
/ 13 апреля 2011

как мне вставить несколько значений из вектора в таблицу базы данных mysql, используя c ++. Т.е. коннектор mysql c ++ не установлен.

мой код

#include cstdlib
#include iostream
#include mysql.h
using namespace std;

MYSQL *connection, mysql;
MYSQL_RES *result;
MYSQL_ROW row;
int query_state;

Я могу вставить строку вручную, какэто:

query_state=mysql_query(connection,"insert into test values('boy','girl')");

Но мне нужно прочитать значения из файла или вектора

Спасибо

1 Ответ

1 голос
/ 13 апреля 2011

Я бы использовал подготовленный MySQL API для этого. Вы можете увидеть полный пример здесь .

Вы бы просто зациклились на векторе, привязав его к новым значениям и повторно выполнив оператор. Это, вероятно, будет более эффективным и менее подверженным ошибкам (труднее пострадать от атак типа SQL-инъекций), чем создание и повторный запуск запроса вручную.

Другой вариант (не такой хороший IMO, но более простой и может страдать от проблем с внедрением sql, если вы не будете осторожны), состоит в том, чтобы перебрать вектор, создающий запрос в потоке строки, а затем использовать буфер потока строки.

Метод строкового потока выглядит примерно так (непроверенный и, вероятно, глючный):

vector<pair<string,int> > values = get_my_values();
stringstream query;
query<<"insert into test values";
for( vector<pair<string,int> >::iterator it = values.begin() ;
     it != values.end();
     ++it )
{
    query<<"(\""<<mysql_real_escape(connection, it->first.c_str())<<"\","<<it->second<<")";
    if( it+1 != values.end() ) { query<<","; }
}
query_state=mysql_query(connection, query.str().c_str() );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...