::이희석 님께서 쓰시길::
> 소스는 아래와 같습니다..
> 근데 update후 다시읽어 보면 프로그램상에선 세그멘테이션 폴트가 나는군요.
> 이리저리 바꿔어도 봤죠...변수를 다르게 해서 읽어 보기도 하구 그러나 다 마찬가지로 세그멘테이션
> 폴트 가 나더군요..그래서..
> 같은 파일 내에서 일단 close시키고 다시 열고 읽었더니만..그건 되더군요..
>
> 이거 왜 그런것이죠....DB 한번만 열구서 거기서 업데이트 하구 삭제하구 하는 것들을 여러번 할수 있
> 어야 하는 거 아닌가요...꼭 알려 주세요....
>
> #include <stdio.h>
> #include "/usr/local/mysql/include/mysql/mysql.h"
> #include <errno.h>
>
> int main(void) {
>
> MYSQL mysql;
> MYSQL_RES* res, *res_2;
> MYSQL_ROW row,row_2;
> MYSQL_FIELD *field_fetch;
> int fields;
> int cnt;
> int row_c=0;
>
> printf("Welcome to db World!!!
");
>
> mysql_init(&mysql);
> if (!mysql_real_connect(&mysql, NULL, "arnold","arnold", "SIP" ,3306, (char *)NULL, 0)) {
> printf("%s
", mysql_error(&mysql));
> exit (1);
> }
> else {
> printf("connect success!!!
");
> if (mysql_query(&mysql, "USE SIP")) {
> printf("%s
", mysql_error(&mysql));
> exit(1);
> }
> if (mysql_query(&mysql, "SELECT * FROM Contact")) {
> printf("%s
", mysql_error(&mysql));
> exit(1);
> }
>
> res = mysql_store_result( &mysql );
> fields = mysql_num_fields(res);
> printf("fields = %d
",fields);
>
> while ( row = mysql_fetch_row( res )) {
> row_c++;
> printf("row_c=%d
",row_c);
> for(cnt = 0; cnt <fields ; ++cnt)
> printf("%12s ", row[cnt]);
> printf("
");
> }
여기서 부터 문제가 발생하는군요...
논리적으로 맞지 않아요.
이미 SELECT 하신것은 모두 패치 하셨네요...
> res = mysql_store_result( &mysql );
위줄 없애 주셔야 할듯....
> mysql_query(&mysql,"UPDATE Contact SET host=\4444444444444\ where user=\janggo\;");
여기 아래 줄부터...
UPDATE 에는 fetch 할 row 가 없어요....
따라서...
여기에...SELECT 가 한번 더와야 겠어요...
수고.
> res = mysql_store_result( &mysql );
>
> while ( row = mysql_fetch_row( res )) {
> row_c++;
> printf("row_c=%d
",row_c);
> for(cnt = 0; cnt <fields ; ++cnt)
> printf("%12s ", row[cnt]);
> printf("
");
> }
>
> while( (field_fetch = mysql_fetch_field(res) ))
> printf("field name %s
", field_fetch -> name ) ;
>
> }
> mysql_free_result( res );
> mysql_close(&mysql);
>
> return 0;
>
> }
>
|