#include #include #include #include void dump_result_process(MYSQL_BIND *r) { printf("dump_result_process(): length=%d value=%ld\n", *r->length, *(int*)r->buffer); free(r->buffer); free(r->length); free(r); } void dump_result(MYSQL_STMT *stmt) { int i; int rows = mysql_stmt_num_rows(stmt); printf("dump_result(): rows=%d\n", rows); for (i = 0; i < rows; ++i) { MYSQL_BIND *r; r = calloc(1, sizeof(MYSQL_BIND)); r->buffer_type = MYSQL_TYPE_LONG; r->buffer = malloc(sizeof(long)); r->buffer_length = sizeof(long); r->length = malloc(sizeof(unsigned long)); if (mysql_stmt_bind_result(stmt, r) != 0) { fprintf(stderr, "mysql_stmt_bind_result(): %s\n", mysql_stmt_error(stmt)); exit(1); } if (mysql_stmt_fetch(stmt) != 0) { fprintf(stderr, "mysql_stmt_fetch(): %s\n", mysql_stmt_error(stmt)); exit(1); } // this will handle the result received in r // in this small example it will free it, but in a more complex // case it could store it anywhere dump_result_process(r); } } void do_test_param(MYSQL_STMT *stmt, int param) { MYSQL_BIND p; memset(&p, 0, sizeof(p)); p.buffer_type = MYSQL_TYPE_LONG; p.buffer = ¶m; p.buffer_length = sizeof(p); p.length = 0; p.is_null = 0; p.is_unsigned = 0; if (mysql_stmt_bind_param(stmt, &p) != 0) { fprintf(stderr, "mysql_stmt_bind_param(): %s\n", mysql_stmt_error(stmt)); exit(1); } if (mysql_stmt_execute(stmt) != 0) { fprintf(stderr, "mysql_stmt_execute(): %s\n", mysql_stmt_error(stmt)); exit(1); } if (mysql_stmt_store_result(stmt) != 0) { fprintf(stderr, "mysql_stmt_store_result(): %s\n", mysql_stmt_error(stmt)); exit(1); } dump_result(stmt); if (mysql_stmt_free_result(stmt) != 0) { fprintf(stderr, "mysql_stmt_free_result(): %s\n", mysql_stmt_error(stmt)); exit(1); } } void do_test(MYSQL *mysql) { static const char query[] = "SELECT ?"; MYSQL_STMT *stmt; int i; stmt = mysql_stmt_init(mysql); if (mysql_stmt_prepare(stmt, query, sizeof(query)) != 0) { fprintf(stderr, "mysql_stmt_prepare(): %s\n", mysql_stmt_error(stmt)); exit(1); } for (i=0; i<4; ++i) { do_test_param(stmt, i); } mysql_stmt_close(stmt); } int main() { MYSQL mysql; int i; mysql_init(&mysql); if (!mysql_real_connect(&mysql, "localhost", "krichy", "asdasd", "krichy", 0, NULL, 0)) { fprintf(stderr, "mysql_real_connect(): %s\n", mysql_error(&mysql)); exit(1); } do_test(&mysql); mysql_close(&mysql); } // compile: gcc -o test test.c -lmysqlclient