#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <mysql/mysql.h>
MYSQL *conn;
void print_err()
{
fprintf(stderr, "%d %s", mysql_errno(conn),mysql_error(conn));
}
void init_db()
{
conn = mysql_init(NULL);
if(conn == NULL)
{
fprintf(stderr, "mysql_init() failed");
exit(EXIT_FAILURE);
}
mysql_real_connect(conn, "192.168.1.10", "test1234", "test1234", "db1", 3306, NULL, 0);
}
void query(char* sql, char* param1)
{
int ret = -1;
MYSQL_STMT *stmt;
MYSQL_BIND bind[1];
long length;
stmt = mysql_stmt_init(conn);
if(conn == NULL)
{
fprintf(stderr, "mysql_stmt_init() failed\n");
exit(EXIT_FAILURE);
}
ret = mysql_stmt_prepare(stmt, sql, strlen(sql));
if(ret != 0)
{
fprintf(stderr, "mysql_stmt_prepare() failed\n");
print_err();
exit(EXIT_FAILURE);
mysql_stmt_execute(stmt);
}else{
fprintf(stdout, "mysql_stmt_prepare() success\n");
}
if(mysql_stmt_reset(stmt))
{
fprintf(stderr, "mysql_stmt_reset() failed\n");
print_err();
}else{
fprintf(stdout, "mysql_stmt_reset() success\n");
}
ret = mysql_stmt_prepare(stmt, sql, strlen(sql));
if(ret != 0)
{
fprintf(stderr, "mysql_stmt_prepare() failed\n");
print_err();
exit(EXIT_FAILURE);
mysql_stmt_execute(stmt);
}else{
fprintf(stdout, "mysql_stmt_prepare() success\n");
}
memset(bind, 0, sizeof(bind));
/*普通bind*/
bind[0].buffer_type = MYSQL_TYPE_STRING;
bind[0].buffer = (char *)param1;
bind[0].buffer_length = strlen(param1);
ret = mysql_stmt_bind_param(stmt, bind);
if(ret != 0)
{
fprintf(stderr, "mysql_stmt_bind_param() failed\n");
exit(EXIT_FAILURE);
mysql_stmt_execute(stmt);
}else{
fprintf(stdout, "mysql_stmt_bind_param() success\n");
}
/*发送long data*/
// bind[0].buffer_type= MYSQL_TYPE_STRING;
// bind[0].length= &length;
// bind[0].is_null= 0;
// ret = mysql_stmt_bind_named_param(stmt, bind, 1, NULL);
// if(ret != 0)
// {
// fprintf(stderr, "mysql_stmt_bind_named_param() failed\n");
// print_err();
// }else{
// fprintf(stdout, "mysql_stmt_bind_named_param() success\n");
// }
if(mysql_stmt_send_long_data(stmt,0,"MySQL",5))
{
fprintf(stderr, "mysql_stmt_send_long_data() failed\n");
print_err();
}else{
fprintf(stdout, "mysql_stmt_send_long_data() success\n");
}
if(mysql_stmt_send_long_data(stmt,0," - The most popular Open Source database",40))
{
fprintf(stderr, "mysql_stmt_send_long_data() failed\n");
print_err();
}else{
fprintf(stdout, "mysql_stmt_send_long_data() success\n");
}
/***/
ret = mysql_stmt_execute(stmt);
if(ret != 0)
{
fprintf(stderr, "mysql_stmt_execute() failed\n");
print_err();
}else{
fprintf(stdout, "mysql_stmt_execute() success\n");
}
mysql_stmt_close(stmt);
}
void close_db()
{
mysql_close(conn);
}
int main()
{
init_db();
query("select md5(?) from dual", "123");
close_db();
}
/*
gcc -o foo mysql_c_demo.c -I/home/mysql8/mysql8.0.22_run/include -L/home/mysql8/mysql8.0.22_run/lib -lmysqlclient
*/