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).