Dear walter Harms,

Thanks for your valuable solution, but in the code which you provided is printing only one row , if i try to print whole table, or 2, or 3, columns fully means its giving segmentation fault, kindly check the below code for furthur information.

software used:
---------------
1. MYSQL 6.0.0
2.MySQL Connection C 6.0
3.Cygwin (used to run the programs using GCC)

Operating Systems:
--------------------
Windows Vista Home basic

building executable:
--------------------------
exporting c connection library (mysql.h) as,
export PATH=$PATH:"c:/Program Files/MySQL/MySQL Connection C 6.0/lib/opt"

and i copied the " libmysql.dll " to local folder where the c code resides,


gcc -g -c simple.c
gcc -g libmysql.dll simple.o

running:
------------
./a.exe



if i run the below code its giving output like this ,(trying to get all values from a particular column of a table).

---------------------------------------####----output-----####-------------------------------------------------------
num_fields = 2
127.0.0.1

localhost
28 [main] a 3836 _cygtls::handle_exceptions: Error while dumping state (probably corrupted stack)
Segmentation fault (core dumped)
------------------------------------------------------------------------------------------------------------------------

Code as follows: (i just modified your code , so as to print all the values regarding particular column)

--------------------------------------------------------------------------------------------------------------code starts here
/*
 simple DB connect test
 gcc  -L/usr/lib/mysql -lmysqlclient connect.c
*/

#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include "C:\Program Files\MySQL\MySQL Connector C 6.0.0\include\mysql.h"

int main()
{
MYSQL *MySQL;
MYSQL_ROW row;
MYSQL_RES *res;
char *dbhost = "localhost";
char *dbuser = "root";
char *dbpass = "";
char *dbname = "mysql";
char sel_smt[200];
int ret;

unsigned int num_fields, i;

MySQL = mysql_init(NULL);
if (MySQL == NULL) {
fprintf(stderr, "Connection failed\n");
exit(1);
}


if (mysql_real_connect
   (MySQL, dbhost, dbuser, dbpass, dbname, 0, NULL, 0) < 0) {

fprintf(stderr, "%s\n", mysql_error(MySQL));
exit(1);
}


//sprintf(sel_smt, "select * from user;");

//printf("\n %s\n", sel_smt);


if (mysql_query(MySQL, "select host, user from user;") != 0) {

fprintf(stderr, "%s\n", mysql_error(MySQL));
exit(1);
}


res = mysql_store_result(MySQL);
if (res == NULL) {

fprintf(stderr, "%s\n", mysql_error(MySQL));
exit(1);
}

//row = mysql_fetch_row(res);

//printf("%s\n", row[0] ? row[0] : --------------------------------------> instead of printing one row

num_fields = mysql_num_fields(res); | | printf("\n num_fields = %d\n", num_fields); | | while ((row = mysql_fetch_row(res)) != NULL) |----------------------> printing host and user column fully { | for(i = 0;i < num_fields;i++) | printf("%s\n", row[i]?row[i]:"NULL"); | | } |


//free(sel_smt);
mysql_free_result(res);

mysql_close(MySQL);
exit(0);
}

------------------------------------------------------------------------------------------------------------------------------code ends here


Thanks and regards,
Ravi




----- Original Message ----- From: "walter harms" <wha...@bfs.de>
To: "Ravi raj" <ravi...@vinjey.com>
Cc: <mysql@lists.mysql.com>; "Vinoth Kumar" <vin...@vinjey.com>
Sent: Thursday, May 07, 2009 6:40 PM
Subject: Re: Memory corrupting, while retrive the query generated



hi ravi,

this works for me. it should help
you to get a starting point



re,
wh


/*
 simpple DB connect test
 gcc  -L/usr/lib/mysql -lmysqlclient connect.c
*/

#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <mysql/mysql.h>

int main()
{
MYSQL *MySQL;
MYSQL_ROW row;
MYSQL_RES *res;
char *dbhost = "localhost";
char *dbuser = "dbuser";
char *dbpass = "";
char *dbname = "mysql";
char *sel_smt;
int ret;

MySQL = mysql_init(NULL);
if (MySQL == NULL) {
fprintf(stderr, "Connection failed\n");
exit(1);
}


if (mysql_real_connect
    (MySQL, dbhost, dbuser, dbpass, dbname, 0, NULL, 0) < 0) {

fprintf(stderr, "%s\n", mysql_error(MySQL));
exit(1);
}


asprintf(&sel_smt, "select count(*) from user");


if (mysql_query(MySQL, sel_smt) != 0) {

fprintf(stderr, "%s\n", mysql_error(MySQL));
exit(1);
}


res = mysql_store_result(MySQL);
if (res == NULL) {

fprintf(stderr, "%s\n", mysql_error(MySQL));
exit(1);
}

row = mysql_fetch_row(res);

printf("%s\n", row[0] ? row[0] : "NULL");

free(sel_smt);
mysql_free_result(res);

mysql_close(MySQL);
exit(0);
}



Ravi raj schrieb:
Dear All,

I want to connect MYSQL with following C application , while i'm trying to retrive the query generated , its corrupting the memory.

Is there any solution , to retrive the query generated with out any memory crashes?

     Please help me to solve this problem.

code as follows,

-------------------------------------------------------------------------------------------------------------------------------------------------------------

  1.. #include <stdio.h>
  2.. #include <stdlib.h>
  3.. #include <string.h>
  4.. #include "mysql.h"
  5.. ?
  6.. int main()
  7.. {
  8.. MYSQL *conn;
  9.. MYSQL_RES *res;
  10.. MYSQL_ROW row;
  11.. MYSQL_FIELD *field;
  12.. unsigned int i = 0;
  13.. char table_type[30];
  14.. char buffer[200];
  15.. unsigned int num_fields;
  16.. char *server = "localhost";
  17.. char *user = "root";
  18.. char *password = ""; /* set me first */
  19.. char *database = "test";
  20.. conn = mysql_init(NULL);
  21.. ?
  22.. /* Connect to database */
23.. if (!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0))
  24.. {
  25.. fprintf(stderr, "%s\n", mysql_error(conn));
  26.. exit(1);
  27.. }
  28.. ?
  29.. if(mysql_ping(conn))
  30.. {
  31.. printf("error in connection \n");
  32.. exit(1);
  33.. }
  34.. sprintf(table_type, "method");
  35.. ?
  36.. sprintf(buffer, "select mid, mname from %s;", table_type);
  37.. mysql_query(conn, buffer);
  38.. res = mysql_store_result(conn);
  39.. num_fields = mysql_num_fields(res);
  40..
  41.. while ((row = mysql_fetch_row(res)) != NULL)
  42.. {
43.. for(i = 0;i < num_fields;i++) //here is the problem , num_fields is corrupting
  44.. printf("%s\n", row[i]?row[i]:"NULL");
  45.. }
  46.. mysql_free_result(res);
  47.. mysql_close(conn);
  48.. return 0;
  49.. }
-----------------------------------------------------------------------------------------------------------------------------------------------------------------


Regards,
Raviraj
-----------------------------------------
mobile : (91) (0) 9742293013
www.vinjey.com
P Think before you print
/* work should be challenging
and the challenge should be fun */





--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/mysql?unsub=arch...@jab.org

Reply via email to