The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"mysql++: больше 1-го запроса"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"mysql++: больше 1-го запроса"  
Сообщение от weldpua2008 email(ok) on 26-Июл-07, 22:09 
Привет Всем
mysql++ 2.3.2
Кто может объяснить:
1.Есть код, который работает. Как можно сделать еще запрос использую те же переменные?

mysqlpp::Connection con(false);
con.connect(MY_DATABASE, MY_HOST, MY_USER, MY_PASSWORD);    
mysqlpp::Query query = con.query();

query << "SELECT * FROM "<<" "<< TABLE_DEFAULT <<" "<<" WHERE ip='"<< ip_argv<<"' AND activ='y'";
mysqlpp::ResUse res = query.use();

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "mysql++: больше 1-го запроса"  
Сообщение от weldpua2008 email(ok) on 26-Июл-07, 22:18 
Вот вся моя прога
ЗЫ: Я только начинаю с с++
Еще такая проблема - если запрос ничего не вернул прога возвращает  - Ошибка сегментирования
За кодом пример

int
main(int argc, char *argv[])
{
string ip_argv;
ip_argv=argv[1];
        mysqlpp::Connection con(false);
        con.connect(MY_DATABASE, MY_HOST, MY_USER, MY_PASSWORD);    
    mysqlpp::Query query = con.query();

query << "SELECT `ip` AS ip, `group` AS g,`num` AS n,`bw_in` AS in_,`bw_in_name` AS in_n,`bw_out` AS out_,`bw_out_name` AS out_n,`n_pipe_in` AS p_in,`n_pipe_out` AS p_out,`hour` AS h_,`activ` AS e,`id` AS `id`,`num2` AS n1 FROM "<<" "<< TABLE_DEFAULT <<" "<<" WHERE ip='"<< ip_argv<<"' AND activ='y'";
mysqlpp::ResUse res = query.use();
        if (res) {
                cout.setf(ios::left);
                mysqlpp::Row row;
                while (row = res.fetch_row()) {;}
string ip,g,n,n1,bw_in,bw_in_name,bw_out,bw_out_name,n_pipe_in,n_pipe_out,hour,activ,id;
ip=row.raw_data(0);
g=row.raw_data(1);
n=row.raw_data(2);
bw_in=row.raw_data(3);
bw_in_name=row.raw_data(4);
bw_out=row.raw_data(5);
bw_out_name=row.raw_data(6);
n_pipe_in=row.raw_data(7);
n_pipe_out=row.raw_data(8);
hour=row.raw_data(9);
activ=row.raw_data(10);
n1=row.raw_data(11);
string exec_this="";
exec_this="/sbin/pfctl -t inat -Tadd "+ip+";";
exec_this +="/sbin/ipfw delete "+n+"; ";
exec_this +="/sbin/ipfw add "+n+" pipe "+n_pipe_out+" all from not 10.0.0.0/8 to "+ip+" out;";
exec_this +="/sbin/ipfw add "+n1+" pipe "+n_pipe_in+" all from "+ip+" to not 10.0.0.0/8 to  in";
char ecc[4000];
strcpy(ecc,exec_this.c_str());
cout <<"      "<<ecc;
system(ecc);
                return 0;
        }
        
        else {
                cout <<"database server DOWN"<<endl;
                return 1;
        }
}
---------------------------------------------------
#./simple1 192.168.0.3
----Это вывод---
/sbin/pfctl -t inat -Tadd 192.168.0.3;/sbin/ipfw delete 500; /sbin/ipfw add 500 pipe 0 all from not 10.0.0.0/8 to 192.168.0.3 out;/sbin/ipfw add 500 pipe Kbit/s all from 192.168.0.3 to not 10.0.0.0/8 to  in

# ./simple1 192.168.0.1
----Это вывод---
Ошибка сегментирования

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "mysql++: больше 1-го запроса"  
Сообщение от weldpua2008 email(??) on 27-Июл-07, 15:12 
неужели никто не пишет на С++ под Линух с использованием mysql++?
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "mysql++: больше 1-го запроса"  
Сообщение от phpcoder email(??) on 28-Июл-07, 12:56 
[...]
>int
>main(int argc, char *argv[])
>{
>string ip_argv;
>ip_argv=argv[1];

[...]
>query << "SELECT `ip` AS ip, `group` AS g,`num` AS n,`bw_in` AS
>in_,`bw_in_name` AS in_n,`bw_out` AS out_,`bw_out_name` AS out_n,`n_pipe_in` AS p_in,`n_pipe_out` AS p_out,`hour`
>AS h_,`activ` AS e,`id` AS `id`,`num2` AS n1 FROM "<<" "<<
>TABLE_DEFAULT <<" "<<" WHERE ip='"<< ip_argv<<"' AND activ='y'";

[...]

- У тебя нет проверки, что программе передан хоть один аргумент
- Ты используешь в SQL-запросе непроверенный данные от пользователя (читай: возможна SQL-инъекция)

[...]
>string exec_this="";
>exec_this="/sbin/pfctl -t inat -Tadd "+ip+";";
>exec_this +="/sbin/ipfw delete "+n+"; ";
>exec_this +="/sbin/ipfw add "+n+" pipe "+n_pipe_out+" all from not 10.0.0.0/8 to "+ip+"
>out;";
>exec_this +="/sbin/ipfw add "+n1+" pipe "+n_pipe_in+" all from "+ip+" to not 10.0.0.0/8
>to  in";
>char ecc[4000];
>strcpy(ecc,exec_this.c_str());
>cout <<"      "<<ecc;

- Зачем тебе создавать временный массив char'ов?
- Почему используется небезопасная ф-ция strcpy()?

>system(ecc);

Так и напиши: system(exec_this.c_str());

P.S. mysql++ действительно никогда не использовал. Советую почитать повнимательнее документацию по нему и использовать отладчик gdb, чтобы понять где падает программа.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "mysql++: больше 1-го запроса"  
Сообщение от valare email on 31-Июл-07, 19:18 

>- У тебя нет проверки, что программе передан хоть один аргумент
>- Ты используешь в SQL-запросе непроверенный данные от пользователя (читай: возможна SQL-инъекция)

Это не страшно - прога используется с root привелегиями+из программы...

>>char ecc[4000];
>>strcpy(ecc,exec_this.c_str());
>>cout <<"      "<<ecc;
>
>- Зачем тебе создавать временный массив char'ов?
>- Почему используется небезопасная ф-ция strcpy()?
>
>>system(ecc);
>
>Так и напиши: system(exec_this.c_str());

ГЫ - Что нашел :)

>P.S. mysql++ действительно никогда не использовал. Советую почитать повнимательнее документацию по нему
>и использовать отладчик gdb, чтобы понять где падает программа.

дык доки на англиском, а что на русском то к С...
gdb - еще больший ребус чем С++ :)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "mysql++: больше 1-го запроса"  
Сообщение от weldpua2008 email(ok) on 01-Авг-07, 00:40 
Спасибо - .c_str() заработало...
Теперь вот такой вопросик:
Программа падает(Ошибка сегментирования) в таком случае:

После запроса Я присваиваю переменным значения, но дело в том, что если запрос ничего не вернул, то присвоение непонятно чего и дает ошибку...
Это Я без gdb понял :)

ip=row.raw_data(0);

Счас ищу функцию которая дает количество строк, которые вернул mysql

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "mysql++: больше 1-го запроса"  
Сообщение от weldpua2008 email(ok) on 01-Авг-07, 00:42 
Временно сделал так:
int ggg;
ggg=0;
while (row = res.fetch_row()) {ggg++;}
Если ничего не вернул mysql то ggg=0 :)
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "mysql++: больше 1-го запроса"  
Сообщение от anonymous (??) on 01-Авг-07, 03:38 
>Временно сделал так:
>int ggg;
>ggg=0;
>while (row = res.fetch_row()) {ggg++;}
>Если ничего не вернул mysql то ggg=0 :)

поищите что-то вроде num_rows()

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру