mysql.c (conectando ao MySQL via C)

Abaixo um programinha simples de exemplo, sobre como acessar o MySQL via C.

A idéia é bem simpls, mas, bem útil se você estiver aprendendo, um dos piores problemas será como colocar os dados recebidos do MySQL em uma estrutura de dados (array) para usar posteriormente, essa é a parte difícil, que fiz, usando “ponteiro que aponta para outro ponteiro“.

Lembre-se, o código é somente exemplo para estudo e aprendizado. Nenhuma implementação de segurança ou performance foi feita, deixando o código o mais simples possível para bom entendimento.

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <mysql.h>
#include <malloc.h>
#include <string.h>
MYSQL *conn;
MYSQL_RES *res;
MYSQL_ROW row;

#define SIZE 100

int db_init(){
        char *server = "localhost";
        char *user = "root";
        char *password = "";
        char *database = "mysql";

        conn = mysql_init(NULL);
        if(!mysql_real_connect(conn,server,user,password,database,0,NULL,0)){
                fprintf(stderr,"%s\n",mysql_error(conn));
                return(0);
        }
        return(1);
}
int main(int argc, char *argv[]){
        int j=0,s=0;

        if( ! db_init() ) return(0);

        char *sql = "select User,Password from user";
        s = mysql_query(conn,sql);
        if(s){
                printf("%s: %s\n",sql,mysql_error(conn));
                return(0);
        }
        res = mysql_store_result(conn);
        const int total = mysql_num_rows(res);

        char **usuarios=NULL,**senhas=NULL;

        usuarios = malloc( total * sizeof usuarios );
        senhas = malloc( total * sizeof senhas );

        if(usuarios==NULL) printf("erro alocando usuarios");
        if(senhas==NULL) printf("erro alocando usuarios");

        while( row=mysql_fetch_row(res) ){
                usuarios[j] = malloc( strlen(row[0])+1 );
                if(usuarios[j]==NULL) printf("erro alocando usuarios[%d]",j);
                if(usuarios[j]) strcpy(usuarios[j],row[0]);

                senhas[j] = malloc( strlen(row[1])+1 );
                if(senhas[j]==NULL) printf("erro alocando senhas[%d]",j);
                if(senhas[j]) strcpy(senhas[j],row[1]);

                j++;

        }

        printf("%20s:%42s\n","User","Password");
        printf("\n=================================\n");
        for(j=0;j<total;j++){
                printf("%20s:%42s\n",usuarios[j],senhas[j]);
        }
        printf("\n=================================\n");

        for(j=0;j<total;j++){
                free(usuarios[j]);
                free(senhas[j]);
        }
        free(usuarios);
        free(senhas);

        mysql_free_result(res);
        mysql_close(conn);

 return(0);

}

Nota: Conforme descrito no “Advanced C” a malloc no C só pode alocar até 32.767 bytes por vez, portanto, cuidado ao tentar alocar grandes quantidades de texto no vetor (usuarios e senhas).

Mais informações sobre Ponteiros no C aqui.

  • Share/Bookmark

Post a Comment

Your email is never shared. Required fields are marked *

*
*