Jump to content

Accesare Unei Baze De Date Mysql Din Limbajul C


astan

Recommended Posts

Postat initial pe http://www.skullbox.info/board/accesarea-u...in-c-t4493.html

Notiuni introductive privind accesarea unei baze de date MYSQL din C

Acest tutorial presupune ca folositi sistemul de operare Linux (desi exemplele ar trebui sa se compileze si pe Windows).

Mai presupun si ca server-ul MYSQL este instalat si, de asemenea, ca libraria client (utilizata pentru

a scrie programe client care sa acceseze serverul) este instalata

Tutorialul se adreseaza incepatorilor.

A. Pornirea si oprirea server-ului MYSQL

Inainte de a accesa o baza de date MYSQL trebuie, evident, sa pornim serverul mysql.

Deschideti o console si executati:

%> sudo /etc/init.d/mysql start

Password: xxxxx

* Starting MySQL database server mysqld [ OK ]

* Checking for corrupt, not cleanly closed and upgrade needing tables.

Inlocuiti "xxxxx" cu parola de root

Oprirea server-ului MYSQL:

sudo /etc/init.d/mysql stop

* Stopping MySQL database server mysqld [ OK ]

Verificarea daca server-ul MYSQL este pornit:

%> sudo mysqladmin -p ping

Password:

Enter password:

mysqld is alive

B. Api-ul client pentru MYSQL (in limbajul C)

Functii importante:

const char *mysql_get_client_info(void)

Returneaza un string care reprezinta versiunea librariei client

MYSQL *mysql_init(MYSQL *mysql)

Initializeaza un obiect MYSQL ce va fi folosit ulterior pentru conexiunea la server.

Daca parametrul "mysql" este NULL, atunci se aloca un nou obiect MYSQL inainte de initializare si se intoarce un pointer la el

Daca parametrul "mysql" nu este NULL, atunci obiectul pasat se reinitializeaza si se intoarce un pointer la acelasi obiect

MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long client_flag)

Aceasta este functia utilizata in programul client pentru conectarea la serverul MYSQL

mysql - pointer la un obiect MYSQL, obtinut in urma unui apel al functiei mysql_init()

host - un sir care contine adresa server-ului (hostname sau IP). Daca host contine sirul "localhost" sau este NULL, se presupune ca programul client si server-ul se afla pe aceeasi masina

user - un sir de caractere care contine username-ul folosit pentru conectarea la server. Daca este NULL sau contine "", se presupune ca user-ul

este cel curent

passwd - parola folosita de "user" pentru conectarea la server

db - numele bazei de date care va fi folosita in mod implicit

port - daca nu este 0, specifica portul pe care clientul va incerca sa il foloseasca pentru a se conecta la server

unix_socket - daca nu este NULL, specifica socket-ul (unix domain) sau pipe-ul folosit pentru comunicarea intre server si client

client_flag - folosit pentru a seta diverse flag-uri, de exemplu daca pachetele transferate intre client si server vor fi comprimate (folosind Zlib), sau daca se foloseste SSL

Functia intoarce un pointer catre un obiect MYSQL care va fi folosit ca un "handle" pentru comunicatia viitoare intre client si server.

Daca functia esueaza se intoarce NULL

int mysql_query(MYSQL *mysql, const char *stmt_str)

Functia este folosita de catre client pentru interogarea bazei de date

mysql - un obiect MYSQL valid obtinut in urma unui apel mysql_real_connect care a reusit

stmt_str - un string care reprezinta interogarea SQL ce va fi transmisa server-ului pentru a fi executata pe o baza de date. Se pot specifica mai multe "statement-uri" SQL separate prin caracterul ';'

Daca interogarea a reusit se intoarce 0, altfel se intoarce o valoare diferita de 0

MYSQL_RES *mysql_store_result(MYSQL *mysql)

Dupa apelul mysql_query() sau mysql_real_query() trebuie apelata functia mysql_store_result(). Aceasta intoarce un pointer la un obiect MYSQL_RES, care va fi folosit pentru extragerea rezultatului interogarii

Se intoarce NULL daca functia esueaza

unsigned int mysql_num_fields(MYSQL_RES *result)

Returneaza numarul de coloane returnat in urma unui apel mysql_store_result()

result - este un pointer catre un obiect MYSQL_RES, intors de exemplu de catre functia mysql_store_result()

MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)

Extrage urmatoarea linie din set-ul resultat in urma executiei unei interogari SQL

result - un pointer la un obiect MYSQL_RES obtinut de exemplu in urma executiei unui apel mysql_store_result()

Functie intoarce o structura de tip MYSQL_ROW folosita pentru a accesa urmatoare linie a setului. Se intoarce NULL daca am ajuns la sfarsitul setului

MYSQL_FIELD *mysql_fetch_field(MYSQL_RES *result)

Functia este utilizata pentru a obtine informatii despre o coloana apartinant unui set rezultat in urma executiei unei interogari SQL

result - un pointer la un obiect MYSQL_RES obtinut de exemplu in urma executiei unui apel mysql_store_result()

Functie intoarce o structura de tip MYSQL_FIELD folosita pentru a accesa informatii despre o coloana din set. Functia intoarce NULL cand s-au parcurs deja toate coloanele setului

void mysql_free_result(MYSQL_RES *result)

Dezaloca resursele asociate unui obiect MYSQL_RES

result - un pointer la un obiect MYSQL_RES obtinut de exemplu in urma executiei unui apel mysql_store_result()

void mysql_close(MYSQL *mysql)

Inchide conexiunea catre server

mysql - un obiect de tip MYSQL folosit pentru comunicatia intre client si server (obtinut, de exemplu, in urma unui apel mysql_real_connect())

Bun, aceste sunt functiile principale ale API-ului. Sa vedem cum sunt folosite in programe practice.

C) Exemple de programe client

Asigurati-va ca sever-ul MYSQL este pornit inainte sa executati programele demonstrative ce vor urma

Programele client trebuie sa include urmatoarele header-e: "my_global.h" si "mysql.h"

C.1) Aflarea versiunii clientului

/* versiune_client.c */

#include <stdio.h>

#include <stdlib.h>

#include <my_global.h>

#include <mysql.h>

int main()

{

?

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.