Connecting to mySQL via C ++

I installed mySQL using

sudo apt-get install mySQL-server

then i installed libmysqlclient15-dev using

sudo apt-get install libmysqlclient15-dev

Next, I installed libmysqlC ++ - dev using

sudo apt-get install libmysqlc++-dev

after that I tried to run the following code using

g++ test.c -I/usr/include/mysql -I/usr/include/mysql++

 #include <mysql.h> #include <stdio.h> #include <stdlib.h> #include <mysql++.h> // just going to input the general details and not the port numbers struct connection_details { char *server; char *user; char *password; char *database; }; MYSQL* mysql_connection_setup(struct connection_details mysql_details) { // first of all create a mysql instance and initialize the variables within MYSQL *connection = mysql_init(NULL); // connect to the database with the details attached. if (!mysql_real_connect(connection,mysql_details.server, mysql_details.user, mysql_details.password, mysql_details.database, 0, NULL, 0)) { printf("Conection error : %s\n", mysql_error(connection)); exit(1); } return connection; } MYSQL_RES* mysql_perform_query(MYSQL *connection, char *sql_query) { // send the query to the database if (mysql_query(connection, sql_query)) { printf("MySQL query error : %s\n", mysql_error(connection)); exit(1); } return mysql_use_result(connection); } int main() { MYSQL *conn; // the connection MYSQL_RES *res; // the results MYSQL_ROW row; // the results row (line by line) struct connection_details mysqlD; mysqlD.server = "localhost"; // where the mysql database is mysqlD.user = "root"; // the root user of mysql mysqlD.password = "123"; // the password of the root user in mysql mysqlD.database = "mysql"; // the databse to pick // connect to the mysql database conn = mysql_connection_setup(mysqlD); // assign the results return to the MYSQL_RES pointer res = mysql_perform_query(conn, "show tables"); printf("MySQL Tables in mysql database:\n"); while ((row = mysql_fetch_row(res)) !=NULL) printf("%s\n", row[0]); // clean up the database result set mysql_free_result(res); // clean up the database link mysql_close(conn); return 0; } 

but I got the following errors:

 r@r-desktop :~/mysqlC++$ g++ test.c -I/usr/include/mysql -I/usr/include/mysql++test.c: In function 'int main()': test.c:47:19: warning: deprecated conversion from string constant to 'char*' test.c:48:17: warning: deprecated conversion from string constant to 'char*' test.c:49:21: warning: deprecated conversion from string constant to 'char*' test.c:50:21: warning: deprecated conversion from string constant to 'char*' test.c:56:48: warning: deprecated conversion from string constant to 'char*' /tmp/ccHFL1M4.o: In function `mysql_connection_setup(connection_details)': test.c:(.text+0xf): undefined reference to `mysql_init' test.c:(.text+0x51): undefined reference to `mysql_real_connect' test.c:(.text+0x65): undefined reference to `mysql_error' /tmp/ccHFL1M4.o: In function `mysql_perform_query(st_mysql*, char*)': test.c:(.text+0xa2): undefined reference to `mysql_query' test.c:(.text+0xb6): undefined reference to `mysql_error' test.c:(.text+0xdd): undefined reference to `mysql_use_result' /tmp/ccHFL1M4.o: In function `main': test.c:(.text+0x170): undefined reference to `mysql_fetch_row' test.c:(.text+0x18c): undefined reference to `mysql_free_result' test.c:(.text+0x198): undefined reference to `mysql_close' collect2: ld returned 1 exit status 

I believe that I did everything right. Can you guys point out where I'm wrong.

+4
source share
3 answers

You must also link the library ( -I just specifies the include directory).

Try

 g++ -I/usr/include/mysql -I/usr/include/mysql++ -L/usr/local/lib -lmysqlpp -lmysqlclient test.c 

Here is an example makefile for you .

Here is an example command line for the individual compilation steps (first creates the object files, and then combines them together):

 g++ -I/usr/include/mysql -I/usr/include/mysql++ -o test.o -c test.c g++ -L/usr/local/lib -lmysqlpp -lmysqlclient -o test test.o 
+8
source

Compile with this command

  gcc -o test -L/usr/lib/mysql -lmysqlclient test.c 

A source

+2
source

You enable mysql++.h , but do not use it.

I changed the code a bit

 #include <mysql/mysql.h> #include <stdio.h> #include <stdlib.h> /* #include <mysql++.h> Do not need this */ 

And compiled it. There were no warnings.

 gcc mysql-test.c $(mysql_config --cflags) $(mysql_config --libs) -Wall 

Performed.

 $ ./a.out Conection error : Access denied for user 'root'@'localhost' (using password: YES) 

It seems you had a spelling error in the error message. This confirms his code.

+2
source

Source: https://habr.com/ru/post/1391472/


All Articles