Форум программистов, компьютерный форум CyberForum.ru

Передать параметры в строку - C++

Восстановить пароль Регистрация
 
kate11
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 33
10.08.2012, 17:49     Передать параметры в строку #1
Всем привет, подскажите как правильно передать параметры в такую строку?
C++
1
char *stat = "INSERT INTO tablica(id, mas, res) VALUES('123', '234', '324')";
Ну т.е. чтобы вместо цифр вставить переменные в которых будет содержаться информация.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5946 / 5551 / 1784
Регистрация: 18.12.2011
Сообщений: 14,181
Завершенные тесты: 1
10.08.2012, 17:58     Передать параметры в строку #2
C++
1
2
3
4
5
6
7
8
char stat[100]= "INSERT INTO tablica(id, mas, res) VALUES('";
char a[]="123",b[]= "234",c= "324",end[]="')";
strcat(stat,a);
strcat(stat,"','");
strcat(stat,b);
strcat(stat,"','");
strcat(stat,c);
strcat(stat,end);
или, если a,b,c целые числа
C++
1
2
char stat[100];
sprintf(stat,"INSERT INTO tablica(id, mas, res) VALUES('%d', '%d', '%d')",a,b,c);
StasGamilton
Эксперт по пяченькам
 Аватар для StasGamilton
67 / 67 / 1
Регистрация: 16.08.2011
Сообщений: 258
10.08.2012, 18:01     Передать параметры в строку #3
C++
1
2
3
4
5
6
std::stringstream ss;
ss << "INSERT INTO tablica(id, mas, res) VALUES"
     << "('" << id << "', "
     << "' " << mas << "'. "
     << "' " << res << "') ";
char *stat = ss.str().c_str();
?
nameless
Эксперт C++
 Аватар для nameless
289 / 288 / 14
Регистрация: 16.06.2009
Сообщений: 486
10.08.2012, 18:06     Передать параметры в строку #4
kate11, boost::format

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <string>
 
#include <boost/format.hpp>
 
int main() {
   const char * str = 
      boost::str(
         boost::format("INSERT INTO tablica(id, mas, res) VALUES('%1%', '%2%', '%3%')") % 123 % 234 % 324
      ).c_str();
   
   std::cout << str << std::endl;
}
http://liveworkspace.org/code/10a5f3...c24ab009324bae
kate11
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 33
11.08.2012, 01:22  [ТС]     Передать параметры в строку #5
Спасибо ребят, но так и не получилось у меня почему-то... вот весь код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <my_global.h>
#include <mysql.h>
 
int main(int argc, char **argv)
{
  MYSQL *conn;
  int len, size;
  char data[1000*1024];
  char chunk[2*1000*1024+1];
  char query[1024*5000];
  FILE *fp;
  conn = mysql_init(NULL);
  mysql_real_connect(conn, "localhost", "root", "", "testbd", 0, NULL, 0);
  fp = fopen("img.png", "rb");
  size = fread(data, 1, 1024*1000, fp);
  mysql_real_escape_string(conn, chunk, data, size);
  char *stat = "INSERT INTO imt(num, img, name) VALUES('1', '%s', '1')";
  len = snprintf(query, sizeof(stat)+sizeof(chunk) , stat, chunk, st);
  mysql_real_query(conn, query, len);
  fclose(fp);
  mysql_close(conn);
}
Как вместо единичек добавить переменные которые задавались бы выше?
zss
Модератор
Эксперт С++
 Аватар для zss
5946 / 5551 / 1784
Регистрация: 18.12.2011
Сообщений: 14,181
Завершенные тесты: 1
11.08.2012, 09:41     Передать параметры в строку #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <my_global.h>
#include <mysql.h>
 
int main(int argc, char **argv)
{
  MYSQL *conn;
  int len, size;
  char data[1000*1024];
  char chunk[2*1000*1024+1];
  char query[1024*5000];
  FILE *fp;
  conn = mysql_init(NULL);
  mysql_real_connect(conn, "localhost", "root", "", "testbd", 0, NULL, 0);
  fp = fopen("img.png", "rb");
  size = fread(data, 1, 1024*1000, fp);
  mysql_real_escape_string(conn, chunk, data, size);
  int val1=1,val2=1;
  char stat[] = "INSERT INTO imt(num, img, name) VALUES('%d', '%s', '%d')";
  len = snprintf(query, sizeof(stat)+sizeof(chunk) , stat, val1,chunk, val2);
  mysql_real_query(conn, query, len);
  fclose(fp);
  mysql_close(conn);
}
Spirited
7 / 7 / 0
Регистрация: 18.01.2009
Сообщений: 55
11.08.2012, 10:00     Передать параметры в строку #7
может не работать из-за того, что одинарные скобки не экранированы, т.е. поставь возле каждой ' поставь \'.
kate11
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 33
12.08.2012, 17:31  [ТС]     Передать параметры в строку #8
Цитата Сообщение от zss Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <my_global.h>
#include <mysql.h>
 
int main(int argc, char **argv)
{
  MYSQL *conn;
  int len, size;
  char data[1000*1024];
  char chunk[2*1000*1024+1];
  char query[1024*5000];
  FILE *fp;
  conn = mysql_init(NULL);
  mysql_real_connect(conn, "localhost", "root", "", "testbd", 0, NULL, 0);
  fp = fopen("img.png", "rb");
  size = fread(data, 1, 1024*1000, fp);
  mysql_real_escape_string(conn, chunk, data, size);
  int val1=1,val2=1;
  char stat[] = "INSERT INTO imt(num, img, name) VALUES('%d', '%s', '%d')";
  len = snprintf(query, sizeof(stat)+sizeof(chunk) , stat, val1,chunk, val2);
  mysql_real_query(conn, query, len);
  fclose(fp);
  mysql_close(conn);
}
Не добавляет, даже с экранированными кавычками, в чем может быть проблема?
Spirited
7 / 7 / 0
Регистрация: 18.01.2009
Сообщений: 55
12.08.2012, 17:45     Передать параметры в строку #9
попробуйте явно что-то записать, например,
char stat[] = "INSERT INTO imt(name) VALUES('sdfjhsdf')";

что-то в этом роде.
kate11
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 33
12.08.2012, 17:50  [ТС]     Передать параметры в строку #10
Цитата Сообщение от Spirited Посмотреть сообщение
попробуйте явно что-то записать, например,
char stat[] = "INSERT INTO imt(name) VALUES('sdfjhsdf')";

что-то в этом роде.
Я выше приводила код, в котором указано явно - все добавлялось, а тут странно почему-то ничего не добавляется и ошибок не каких не пишет...
Spirited
7 / 7 / 0
Регистрация: 18.01.2009
Сообщений: 55
12.08.2012, 18:02     Передать параметры в строку #11
погодите вы хотите записать в базу данных эти значение '%d', '%s', '%d'?
если да? то попробуйте написать этот запрос напрямую в мускл

Ваш запрос именно это и делает, в поле num должно записаться %d, в img - %s, name - %d.

Когда Вы вставляете явные значения работать будет на ура. Напишите функцию которая формирует запрос.
kate11
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 33
12.08.2012, 18:09  [ТС]     Передать параметры в строку #12
Цитата Сообщение от Spirited Посмотреть сообщение
погодите вы хотите записать в базу данных эти значение '%d', '%s', '%d'?
если да? то попробуйте написать этот запрос напрямую в мускл

Ваш запрос именно это и делает, в поле num должно записаться %d, в img - %s, name - %d.

Когда Вы вставляете явные значения работать будет на ура. Напишите функцию которая формирует запрос.
Да нет, настолько усложнять мне не нужно, мне нужно банально передать эти 2 параметра.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.08.2012, 19:21     Передать параметры в строку
Еще ссылки по теме:

string обьявленый в классе передать в параметры конструктора C++
Передать параметры в main C++
Нужно из класса наследника передать параметры в класс родителя C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Spirited
7 / 7 / 0
Регистрация: 18.01.2009
Сообщений: 55
12.08.2012, 19:21     Передать параметры в строку #13
я Вам уже наклипал на скорую руку эту функцию

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
char *InsertQuery(int num, char *img, char *name) {
 
    char *query = "INSERT INTO tablica(id, mas, res) VALUES(\'";
    char numCh[33];
    itoa(num, numCh,10);
 
    strcat(query, numCh);
    strcat(query, "\', \'");
    strcat(query, img);
    strcat(query, "\', \'");
    strcat(query, name);
    strcat(query, "\'");
 
    return query;
}
 
int main(int argc, char* argv[])
{
    int num = 1;
    char *img = "123";
    char *name = "serg";
 
    char *query;
 
    query = InsertQuery(num, img, name);
 
    cout << query;
 
    system("pause");
 
    return 0;
}
Добавлено через 1 минуту
но она требует доработки))

Добавлено через 53 минуты
переработаный вариант

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
char *InsertQuery(int num, char *img, char *name) {
    char *query = new char [100];
    char *query1 = "INSERT INTO tablica(id, mas, res) VALUES('";
    char numCh[100];
    itoa(num, numCh,10);
 
    strcpy(query, query1);
    strcat(query, numCh);
    strcat(query, "', '");
    strcat(query, img);
    strcat(query, "', '");
    strcat(query, name);
    strcat(query, "')");
 
    return query;
}
Добавлено через 1 минуту
теперь вы можете формировать свой запрос
Yandex
Объявления
12.08.2012, 19:21     Передать параметры в строку
Ответ Создать тему
Опции темы

Текущее время: 18:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru