56
MySQL C API MySQL C API Izbor tipova i funkcija Izbor tipova i funkcija sa primerima sa primerima Miloš Kralj Miloš Kralj Zoran Jakšić Zoran Jakšić

MySQL C API Izbor tipova i funkcija sa primerima

  • Upload
    crete

  • View
    35

  • Download
    0

Embed Size (px)

DESCRIPTION

MySQL C API Izbor tipova i funkcija sa primerima. Miloš Kralj Zoran Jakšić. C API (Application Programming Interface) kod se distribuira zajedno sa MySQL-om, u okviru biblioteke pod nazivom mysqlclient , i omogućava programima pisanim na programskom jeziku C pristup bazama podataka. - PowerPoint PPT Presentation

Citation preview

Page 1: MySQL C API Izbor tipova i funkcija sa primerima

MySQL C APIMySQL C API

Izbor tipova i funkcija sa Izbor tipova i funkcija sa primerimaprimerima

Miloš KraljMiloš Kralj Zoran JakšićZoran Jakšić

Page 2: MySQL C API Izbor tipova i funkcija sa primerima

• C API (Application Programming Interface) kod se distribuira zajedno sa MySQL-om, u okviru biblioteke pod nazivom mysqlclient, i omogućava programima pisanim na programskom jeziku C pristup bazama podataka.

• Takođe, mnogi klijenti u samom izvornom kodu MySQL-a pisani su na programskom jeziku C.

• Većina ostalih klijentskih API-ja takođe koristi biblioteku mysqlclient za komunikaciju sa MySQL serverom.

Page 3: MySQL C API Izbor tipova i funkcija sa primerima

• Klijent ima određenu maksimalnu veličinu komunikacionog bafera.

• Veličina ovog bafera, koja inicijalno ima vrednost 16Kb, automatski se podešava u zavisnosti od potreba programa. Manuelno podešavanje maksimalne vrednosti bafera na neku veliku vrednost ne uzrokuje samo po sebi povećanje potrošnje resursa, jer se veličina bafera povećava jedino po potrebi.

• Ovaj bafer mora biti dovoljno veliki kako bi mogao da sadrži jedan SQL iskaz (za komunikaciju između klijenta i servera), i jedan red podataka koji su vraćeni nazad kao rezultat upita.

Page 4: MySQL C API Izbor tipova i funkcija sa primerima

• Na primer: Ukoliko imamo BLOB (BinaryLargeOBject) polja koja mogu sadržati do 16Mb podataka, onda komunikacioni bafer mora biti veličine bar 16Mb i na strani servera i na strani klijenta.

• Na strani klijenta maksimalna vrednost ovog bafera inicijalno je podešena na 16Mb, dok kod servera ta vrednost iznosi 1Mb i može se po potrebi promeniti menjanjem vrednosti parametra max_allowed_packet.

• Nakon svakog upita, radi bezbednosti, server sam smanjuje veličinu komunikacionog bafera na vrednost iz parametra net_buffer_length. Klijent, s druge strane čuva podešenu veličinu dok god je veza uspostavljena.

Page 5: MySQL C API Izbor tipova i funkcija sa primerima

• MYSQL

Predstavlja “handle” za jednu uspostavljenu vezu sa bazom podataka. Nije sigurno praviti kopije ovakvih struktura jer ne postoji garancija da će takva kopija moći da se koristi.

• MYSQL_RES

Ova struktura treba da sadrži podatke vraćene kao rezultat posle izvršenog upita koji vraća redove. (SELECT, SHOW, DESCRIBE, EXPLAIN).

MySQL C API strukture i tipovi podatakaMySQL C API strukture i tipovi podataka

Page 6: MySQL C API Izbor tipova i funkcija sa primerima

typedef struct st_mysql {NET net; /* Parametri komunikacije */gptr connector_fd; /* ConnectorFd ili SSL enkripcija*/char *host,*user,*passwd,*unix_socket,*server_version,*host_info,*info,*db;unsigned int port,client_flag,server_capabilities;unsigned int protocol_version;unsigned int field_count;unsigned int server_status;unsigned long thread_id; /* Identifikacioni broj veze na serveru */my_ulonglong affected_rows;my_ulonglong insert_id;my_ulonglong extra_info;unsigned long packet_length;enum mysql_status status;MYSQL_FIELD *fields;MEM_ROOT field_alloc;my_bool free_me; /* brisanje pri pozivu mysql_close() */my_bool reconnect; /* automatski reconnect */struct st_mysql_options options;char scramble_buff[9];struct charset_info_st *charset;unsigned int server_language;

} MYSQL;

Page 7: MySQL C API Izbor tipova i funkcija sa primerima

typedef struct st_mysql_res {my_ulonglong row_count; /* broj redova */unsigned int field_count, current_field;MYSQL_FIELD *fields; /* informacije o poljima */MYSQL_DATA *data; /* podaci */MYSQL_ROWS *data_cursor;MEM_ROOT field_alloc;MYSQL_ROW row; /* za nebaferisano čitanje */MYSQL_ROW current_row; /* bafer za tekući red */unsigned long *lengths; /* dužine kolona tekućeg reda*/MYSQL *handle; /* za nebaferisano čitanje */my_bool eof;

} MYSQL_RES;

Page 8: MySQL C API Izbor tipova i funkcija sa primerima

• MYSQL_ROW

Može da sadrži jedan red podataka. Potpuno bezbedno po pitanju tipova. Implementirana je kao niz stringova. (Ukoliko vrednosti polja mogu da sadrže binarne podatke, ne smeju se tretirati kao niske terminisane nulom, jer binarni podaci mogu sadržati nula bajtove)

Redovi se uzimaju pozivima mysql_fetch_row()

• MYSQL_FIELD

Ova struktura sadrži informacije o poljima, kao što su na primer: ime polja, tip, veličina, itd. Podaci za svako pojedinačno polje pohranjuju se u strukturu uzastopnim pozivima funkcije mysql_fetch_field().

Page 9: MySQL C API Izbor tipova i funkcija sa primerima

• my_ulonglong

Tip podatka koji se koristi kako bi se izrazio broj redova neke tabele ili rezultata upita, kao i u funkcijama mysql_affected_rows(), mysql_num_rows() i mysql_insert_id().

Naime, radi se o neoznačenom celobrojnom tipu veličine 64bit-a pa ima opseg od 0 do 1.84467 x 1019

Na nekim sistemima pokušaj štampanja vrednosti ovog tipa korišćenjem f-je printf() rezultuje greškom. Ona se mora konvertovati u vretnost tipa unsigned long i onda pozvati printf() sa parametrom %lu za format.

• my_bool

Bulovski tip. Sadrži vrednosti true (ne-nula) i false (nula).

Page 10: MySQL C API Izbor tipova i funkcija sa primerima

typedef struct st_mysql_field { char *name; char *org_name; char *table; char *org_table; char *db; char *catalog; char *def; unsigned long length; unsigned long max_length; unsigned int name_length; unsigned int org_name_length; unsigned int table_length; unsigned int org_table_length; unsigned int db_length; unsigned int catalog_length; unsigned int def_length; unsigned int flags; unsigned int decimals; unsigned int charsetnr; enum enum_field_types type;} MYSQL_FIELD;

Struktura MYSQL_FIELDStruktura MYSQL_FIELD

Page 11: MySQL C API Izbor tipova i funkcija sa primerima

• char *name

Predstavlja ime polja i to je string terminisan nulom. Ukoliko je nekom polju pridodat alias pomoću AS, vrednost ovog člana je taj alias.

• char *org_name

Ime polja kao string terminisan nulom. Aliasi su ignorisani.

• char *table

Ime tabele koja sadrži konkretno polje. Za polja koja su rezultat izračunavanja ova vrednost je prazna, a ukoliko je kolona izabrana iz pogleda ona sadrži ime pogleda. Takođe u slučaju postojanja aliasa, prikazuje se njegovo ime.

Page 12: MySQL C API Izbor tipova i funkcija sa primerima

• char *org_table

Slično kao malopre, aliasi se ignorišu. U slučaju upita nad pogledom, vrednost sadrži ime tabele nad kojom je pogled definisan.

• char *db

Ime baze podataka iz koje je konkretno polje. Ako je polje rezultat izračunavanja, ova vrednost je prazna.

• char *catalog

Ime kataloga. Podrazumevana vrednost je “def”.

• unsigned long length

Širina polja - odgovara širini prikaza u bajtovima.

Page 13: MySQL C API Izbor tipova i funkcija sa primerima

• unsigned long max_length

Maksimalna širina polja za čitav rezultat. Ovo predstavlja dužinu u bajtovima najšireg polja u rezultatu. Na primer, ukoliko najšire polje ima vrednost “-12.345”, vrednost ovog člana strukture biće 7.

• unsigned int name_length, org_name_length, table_length, org_table_length, db_length, catalog_length, def_length

Predstavljaju dužine odgovarajućih stringova, onako kako ih vraća strlen().

• unsigned int flags

Zastavice za različite namene... Neoznačeni ceo broj koji može biti 0 ili sledeći bitovi mogu biti uključeni.

Page 14: MySQL C API Izbor tipova i funkcija sa primerima

Vrednost FLAG-a Opis

NOT_NULL_FLAG Ne-NULL polje

PRI_KEY_FLAG Polje je deo primarnog ključa

UNIQUE_KEY_FLAG Polje je deo jedinstvenog ključa

MULTIPLE_KEY_FLAG Polje je deo ne-jedinstvenog ključa

UNSIGNED_FLAG Polje ima atribut UNSIGNED

ZEROFILL_FLAG Polje ima atribut ZEROFILL

BINARY_FLAG Polje ima atribut BINARY

AUTO_INCREMENT_FLAG Polje ima AUTO_INCREMENT atribut

ENUM_FLAG Polje je ENUM

SET_FLAG Polje je SET (skup)

BLOB_FLAG Polje je BLOB

TIMESTAMP_FLAG Polje je TIMESTAMP

NO_DEFAULT_VALUE_FLAG Polje nema podrazumevanu (default) vrednost

Page 15: MySQL C API Izbor tipova i funkcija sa primerima

• Primer:

if (field->flags && PRI_KEY_FLAG)printf (“Ovo polje je deo primarnog ključa”);

• Napomena:

Korišćenje zastavica BLOB_FLAG, ENUM_FLAG, SET_FLAG i TIMESTAMP_FLAG je u dokumentaciji označeno kao zastarelo iz razloga što se one više odnose na tip polja, a ne na atribute polja. Preporučuje se poređenje vrednosti člana field->type sa konstantama MYSQL_TYPE_BLOB, MYSQL_TYPE_ENUM, MYSQL_TYPE_SET, MYSQL_TYPE_TIMESTAMP.

• Primer:

if (field->type == MYSQL_TYPE_BLOB)printf (“Ovo polje je BLOB”);

Page 16: MySQL C API Izbor tipova i funkcija sa primerima

• unsigned int charsetnr

Broj karakterskog skupa datog polja. Može se koristiti za razlikovanje binarnih i ne-binarnih podataka za podatke tipa stringova. Ukoliko je vrednost atributa 63 onda se radi o binarnim podacima. Na ovaj način se pravi razlika između BINARY i CHAR, VARBINARY i VARCHAR kao i razlika između BLOB i TEXT tipova.

• unsigned int decimals

Broj cifara koje se koriste kod polja numeričkog tipa

• enum enum_field_types type

Predefinisane vrednosti za tip polja. U sledećoj tabeli se nalaze konstante koje se koriste u ovu svrhu.

Page 17: MySQL C API Izbor tipova i funkcija sa primerima

Type Value Type Description

MYSQL_TYPE_TINY TINYINT

MYSQL_TYPE_SHORT SMALLINT

MYSQL_TYPE_LONG INTEGER 32bit

MYSQL_TYPE_INT24 MEDIUMINT 24bit

MYSQL_TYPE_LONGLONG BIGINT 64bit

MYSQL_TYPE_DECIMAL DECIMAL or NUMERIC

MYSQL_TYPE_NEWDECIMAL Precision math DECIMAL or NUMERIC

MYSQL_TYPE_FLOAT FLOAT

MYSQL_TYPE_DOUBLE DOUBLE or REAL

MYSQL_TYPE_BIT BIT

MYSQL_TYPE_TIMESTAMP TIMESTAMP

MYSQL_TYPE_DATE DATE

MYSQL_TYPE_TIME TIME

MYSQL_TYPE_DATETIME DATETIME

MYSQL_TYPE_YEAR YEAR

MYSQL_TYPE_STRING CHAR or BINARY

MYSQL_TYPE_VAR_STRING VARCHAR or VARBINARY

MYSQL_TYPE_BLOB BLOB or TEXT

MYSQL_TYPE_SET SET

MYSQL_TYPE_ENUM ENUM

MYSQL_TYPE_GEOMETRY Spatial

MYSQL_TYPE_NULL NULL

Page 18: MySQL C API Izbor tipova i funkcija sa primerima

• Programi koji koriste MySQL C API trebalo bi da prate sledeći opšti okvir prilikom interakcije sa MySQL-om:

1. Inicijalizacija MySQL biblioteke pozivanjem funkcije mysql_library_init().

2. Inicijalizacija “connection handler”-a pozivanjem funkcije mysql_init() i uspostavljanje veze sa serverom pozivanjem funkcije mysql_real_connect()

3. Izvršavanje SQL upita i rad sa rezultatima

4. Prekidanje veze sa MySQL serverom pozivom mysql_close()

5. Završetak rada sa bibliotekom - mysql_library_end()

MySQL C API MySQL C API Pregled funkcijaPregled funkcija

Page 19: MySQL C API Izbor tipova i funkcija sa primerima

• Svrha pozivanja mysql_library_init() i mysql_library_end() je da se obezbedi valjana inicijalizacija i finalizacija MySQL biblioteke.

• Ukoliko se ne pozove mysql_library_end(), jedan blok memorije ostaće alociran, i van dalje kontrole.

• U okruženju koje ne koristi višenitno programiranje, poziv za inicijalizaciju biblioteke može se propustiti jer će mysql_init() pozvati funkciju mysql_library_init(). U svakom slučaju mysql_library_init() nije “thread-safe” kao ni mysql_init(), upravo zbog pozivanja ove funkcije.

Page 20: MySQL C API Izbor tipova i funkcija sa primerima

• Za povezivanje na server poziva se funkcija mysql_init() za inicijalizaciju “connection handler”-a, pa se nakon toga poziva mysql_real_connect() korišćenjem dobijenog “handle”-a kao parametra, pored ostalih parametara kao što su ime hosta, korisničko ime, lozinka...

• Nakon uspostavljanja veze, mysql_real_connect() podešava fleg reconnect (u okviru MYSQL strukture) na 1 u verzijama MySQL starijim od 5.0.3, ili na 0 u novijim verzijama. Vrednost 1 znači da ukoliko iskaz nije izvršen usled gubitka veze, pre odustajanja i ispisa poruke o grešci pokušaće se ponovno uspostavljanje veze.

• Kada veza više nije potrebna pozivamo mysql_close()

Page 21: MySQL C API Izbor tipova i funkcija sa primerima

• Dok je veza aktivna klijent može da šalje SQL iskaze serveru korišćenjem funkcije mysql_query() ili mysql_real_query(). Razlika između ove dve funkcije je u tome što prva očekuje da je iskaz zadat kao string terminisan nulom, dok druga funkcija očekuje odbrojani string. Ovo je posebno pogodno ako string sadrži binarne podatke u kojima se mogu naći nula bajtovi.

• Za svaki ne SELECT upit (kao što su INSERT, UPDATE, DELETE), može se saznati koliko redova je promenjeno pozivom funkcije mysql_affected_rows().

• Za SELECT upite, rezultat se dobija u obliku skupa rezultata - struktura MYSQL_RES

Page 22: MySQL C API Izbor tipova i funkcija sa primerima

• Postoje dva načina za procesiranje rezultata.

• Prvi je da prvo učitamo sve rezultate u klijentovu memoriju korišćenjem funkcije mysql_store_result(), pa da ih obrađujemo.

• Drugi način je da, korišćenjem funkcije mysql_use_result(), inicijalizujemo memoriju za rezultat, pa da u nju ubacujemo red po red. Taj način je nešto brži i koristi manje memorije.

Page 23: MySQL C API Izbor tipova i funkcija sa primerima

• U oba slučaja redovima pristupamo korišćenjem funkcije mysql_fetch_row().

• Prednost mysql_store_result() je što omogućuje korišćenje funkcija za pretragu i prebrojavanje redova, ali zato koristi znatno više memorije.

• Prednost mysql_use_rseult() je u tome što koristi manje memorije, ali zato ne znamo koliko redova ima naš rezultat dok ih sve ne preuzmemo i moramo ih preuzeti sve čak i ako nađemo traženi red pre nego što ih sve izlistamo.

Page 24: MySQL C API Izbor tipova i funkcija sa primerima

• Posle korišćenja bilo kog od ova dva načina za iščitavanje rezultata treba pozvati mysql_free_result() da bi oslobodili memoriju.

• API omogućava da proverimo da li je naš upit uspešan korišćenjem funkcije mysql_field_count(). Ukoliko posle svakog upita odradimo mysql_store_result() možemo saznati da li je upit bio uspešan ne znajući da li smo radili SELECT, INSERT, DELETE ili neki drugi upit.

• Naime ukoliko je upit vratio MYSQL_RES strukturu znači da smo odradili SELECT upit koji je uspeo i možemo iščitati rezultat.

Page 25: MySQL C API Izbor tipova i funkcija sa primerima

• Ukoliko nismo dobili MYSQL_RES strukturu korišćenjem mysql_field_count() možemo znati da li je upit bio uspešan.

• Ukoliko je njena povratna vrednost nula znači da smo odradili uspešan upit koji ne vraća rezultat (npr. INSERT ili DELETE).

• Druga mogućnost je da smo kao povratnu vrednost dobili neki ne-nula broj. To nam ukazuje da je upit bio SELECT tipa koji je napravio grešku.

Page 26: MySQL C API Izbor tipova i funkcija sa primerima

mysql_library_init()mysql_library_init()int mysql_library_init(int argc, char **argv, char **groups)int mysql_library_init(int argc, char **argv, char **groups)

Opis:Opis:Ovu funkciju treba pozvati da bi se inicijalizovala MySQL biblioteka Ovu funkciju treba pozvati da bi se inicijalizovala MySQL biblioteka pre korišćenja bilo koje druge MySQL funkcije.pre korišćenja bilo koje druge MySQL funkcije.Argumenti Argumenti argc argc i i argv argv su analogni istoimenim argumentima su analogni istoimenim argumentima main()main() funkcije.funkcije.Argument Argument groupsgroups je niz stringova koji sadr je niz stringova koji sadrže imenaže imena grup grupaa u u opcionim fajlovima čije opcije pozivamo. Poslednji u nizu bi trebao opcionim fajlovima čije opcije pozivamo. Poslednji u nizu bi trebao da bude NULL.da bude NULL.

Povratne vrednosti:Povratne vrednosti:Nula ukoliko je uspešno izvršena, ne nula u suprotnom.Nula ukoliko je uspešno izvršena, ne nula u suprotnom.

Greške:Greške:Nema.Nema.

Page 27: MySQL C API Izbor tipova i funkcija sa primerima

mysql_library_end()mysql_library_end()void mysql_librarz_end(void)void mysql_librarz_end(void)

Opis:Opis:

Ova funkcija finalizuje MySQL biblioteku. Treba je pozvati kada Ova funkcija finalizuje MySQL biblioteku. Treba je pozvati kada završimo sa korišćenjem biblioteke(npr. kada se diskonektujemo sa završimo sa korišćenjem biblioteke(npr. kada se diskonektujemo sa servera). servera).

Povratne vrednosti:Povratne vrednosti:

Nema.Nema.

Greške:Greške:

Nema.Nema.

Page 28: MySQL C API Izbor tipova i funkcija sa primerima

mysql_init()mysql_init()MYSQL *mysql_init(MYSQL *mysql)MYSQL *mysql_init(MYSQL *mysql)

Opis:Opis:Alocira i inicijaliyuje MYSQL strukturu koju možemo koristiti za Alocira i inicijaliyuje MYSQL strukturu koju možemo koristiti za mysql_real_connect(). Ukoliko je mysql_real_connect(). Ukoliko je mysql mysql NULL pokazivač funkcija će NULL pokazivač funkcija će alocirati, inicijalizovati i vratiti novu strukturu. U tom slučaju alocirati, inicijalizovati i vratiti novu strukturu. U tom slučaju memoriju možemo osloboditi pomoću mysql_close() funkcije.memoriju možemo osloboditi pomoću mysql_close() funkcije.

Povratne vrednosti:Povratne vrednosti:Inicijalizovani MYSQL pokazivač. NULL ukoliko nije bilo dovoljno Inicijalizovani MYSQL pokazivač. NULL ukoliko nije bilo dovoljno memorije za alokaciju.memorije za alokaciju.

Greške:Greške:U slučaju nedostatka memorije NULL je povratna vrednost funkcije.U slučaju nedostatka memorije NULL je povratna vrednost funkcije.

Page 29: MySQL C API Izbor tipova i funkcija sa primerima

mysql_close()mysql_close()void mysql_close(MYSQL *mysql)void mysql_close(MYSQL *mysql)

Opis:Opis:

Zatvara, prethodno otvorenu, konekciju.Zatvara, prethodno otvorenu, konekciju.

Povratne vrednosti:Povratne vrednosti:

Nema.Nema.

Greške:Greške:

Nema.Nema.

Page 30: MySQL C API Izbor tipova i funkcija sa primerima

mysql_connect()mysql_connect()MYSQL *mysql_connect(MYSQL *mysql, const char *host, const MYSQL *mysql_connect(MYSQL *mysql, const char *host, const char *user, const char *password)char *user, const char *password)

Opis:Opis:

Ova funkcija je zastarela. Koristite mysql_real_connect() umesto Ova funkcija je zastarela. Koristite mysql_real_connect() umesto nje.nje.

Povratne vrednosti:Povratne vrednosti:

Iste kao i za mysql_real_connect().Iste kao i za mysql_real_connect().

Greške:Greške:

Iste kao i za mysql_real_connect().Iste kao i za mysql_real_connect().

Page 31: MySQL C API Izbor tipova i funkcija sa primerima

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

Opis:Opis:mysql_real_connect() pokušava da uspostavi konekciju sa MYSQL mysql_real_connect() pokušava da uspostavi konekciju sa MYSQL bazom podataka koja je pokrenuta na bazom podataka koja je pokrenuta na hosthost-u.mysql_real_connect() -u.mysql_real_connect() mora uspešno da se izvrši pre nego što možemo izvršavati bilo koje mora uspešno da se izvrši pre nego što možemo izvršavati bilo koje druge API funkcije koje zahtevaju validnu MYSQL konekciju.druge API funkcije koje zahtevaju validnu MYSQL konekciju.Argumenti funkcije su sledeci:Argumenti funkcije su sledeci:Prvi parametar je adresa postojeće MYSQL strukture. Pre pozivanja Prvi parametar je adresa postojeće MYSQL strukture. Pre pozivanja mysql_real_connect() mora se pozvati mysql_init() da bi mysql_real_connect() mora se pozvati mysql_init() da bi inicijalizovali MYSQL strukturu.inicijalizovali MYSQL strukturu.Vrednost Vrednost hosthost može biti ime može biti ime hosthost-a ili njegova IP adresa. Ukoliko je -a ili njegova IP adresa. Ukoliko je hosthost NULL ili string “localhost” konektuje NULL ili string “localhost” konektujemomo se na lokalnog se na lokalnog hosthost-a.-a.useruser argument sadrži MySQL login ID korisnika. Ukoliko j argument sadrži MySQL login ID korisnika. Ukoliko jee useruser NULL ili prazan string podrazumeva se trenutni korisnik.NULL ili prazan string podrazumeva se trenutni korisnik.passwordpassword argument sadrži šifru za korisnika. argument sadrži šifru za korisnika. db db je ime baze podataka koju želimo da koristimo po defaultu.je ime baze podataka koju želimo da koristimo po defaultu.

Page 32: MySQL C API Izbor tipova i funkcija sa primerima

Ukoliko Ukoliko port port nije 0 to će biti port za TCP/IP konekciju. nije 0 to će biti port za TCP/IP konekciju.Ukoliko Ukoliko unix_socketunix_socket nije NULL, string specificira socket ili imenovani nije NULL, string specificira socket ili imenovani pajp koji će se koristiti.pajp koji će se koristiti.client_flag client_flag je uglavnom 0, ali može biti i kombinacija nekih od je uglavnom 0, ali može biti i kombinacija nekih od flagova (npr. CLIENT_NO_SCHEMA, CLIENT_COMPRESS, flagova (npr. CLIENT_NO_SCHEMA, CLIENT_COMPRESS, CLIENT_SSL…)CLIENT_SSL…)

Povratne vrednosti:Povratne vrednosti:Pokazivač na MYSQL konekciju, ukoliko je konektovanje bilo Pokazivač na MYSQL konekciju, ukoliko je konektovanje bilo uspešno, odnosno NULL ukoliko je bilo neuspešno. Kod uspešnog uspešno, odnosno NULL ukoliko je bilo neuspešno. Kod uspešnog konektovanja povratna vrednost je ista kao i prvi argument.konektovanja povratna vrednost je ista kao i prvi argument.

Greške:Greške:CR_CONN_HOST_ERRORCR_CONN_HOST_ERROR

Nije uspeo da se konektuje na MySQL server.Nije uspeo da se konektuje na MySQL server.CR_CONNECTION_ERRORCR_CONNECTION_ERROR

Nije uspeo da se konektuje na lokalni MySQL server.Nije uspeo da se konektuje na lokalni MySQL server.CR_IPSOCK_ERRORCR_IPSOCK_ERROR

Nije uspeo da napravi IP socket.Nije uspeo da napravi IP socket.CR_OUT_OF_MEMORYCR_OUT_OF_MEMORY

Nedostatak memorije.Nedostatak memorije.

Page 33: MySQL C API Izbor tipova i funkcija sa primerima

CR_CREATE_SOCKET_ERRORCR_CREATE_SOCKET_ERRORNije uspeo da napravi Unix socket.Nije uspeo da napravi Unix socket.

CR_UNKNOWN_HOSTCR_UNKNOWN_HOSTNije uspeo da nađe IP za zadat hostname.Nije uspeo da nađe IP za zadat hostname.

CR_VERSION_ERRORCR_VERSION_ERRORGreška prouzrokovana pokušajem da se konektuje na server koji Greška prouzrokovana pokušajem da se konektuje na server koji

koristi drugačiji protokol od biblioteke klijenta.koristi drugačiji protokol od biblioteke klijenta.CR_NAMEDPIPEOPEN_ERRORCR_NAMEDPIPEOPEN_ERROR

Nije uspeo da napravi imenovani pajp pod Windowsom.Nije uspeo da napravi imenovani pajp pod Windowsom.CR_NAMEDPIPEWAIT_ERROCR_NAMEDPIPEWAIT_ERRORR

Nije uspeo da sačeka imenovani pajp pod Windowsom.Nije uspeo da sačeka imenovani pajp pod Windowsom.CR_NAMEDPIPESETSTATE_ERRORCR_NAMEDPIPESETSTATE_ERROR

Nije uspeo da dobije pokazivač na imenovani pajp po Windowsom.Nije uspeo da dobije pokazivač na imenovani pajp po Windowsom.CR_SERVER_LOSTCR_SERVER_LOST

Ukoliko je Ukoliko je connect_timeoutconnect_timeout > 0 i bilo je potrebno više od > 0 i bilo je potrebno više od connect_timeout connect_timeout sekundi da bi se konektovao na server, odnosno sekundi da bi se konektovao na server, odnosno ukoliko je server umro.ukoliko je server umro.

Page 34: MySQL C API Izbor tipova i funkcija sa primerima

mysql_change_user()mysql_change_user()my_bool mysql_change_user(MYSQL *mysql, const char *user, my_bool mysql_change_user(MYSQL *mysql, const char *user, const char *password, const char *db)const char *password, const char *db)

Opis:Opis:Menja korisnika i čini da baza, specifikovana pomoću db, postane Menja korisnika i čini da baza, specifikovana pomoću db, postane trenutna baza na konekciji specificiranoj pomoću mysql. U narednim trenutna baza na konekciji specificiranoj pomoću mysql. U narednim upitima ova baza se podrazumeva ukoliko ne specificiramo upitima ova baza se podrazumeva ukoliko ne specificiramo drugačije. mysql_change_user() ne uspeva ukoliko korisnik nemože drugačije. mysql_change_user() ne uspeva ukoliko korisnik nemože biti identifikovan, odnosno ukoliko nema pristup bazi. U tom slučaju biti identifikovan, odnosno ukoliko nema pristup bazi. U tom slučaju se korisnik i baza ne menjaju. db parametar se može postaviti na se korisnik i baza ne menjaju. db parametar se može postaviti na NULL ukoliko ne želimo da imamo default bazu.NULL ukoliko ne želimo da imamo default bazu.Ova komanda resetuje stanje kao da je urađen novi Ova komanda resetuje stanje kao da je urađen novi connectconnect..

Povratne vrednosti:Povratne vrednosti:Nula ukoliko je uspelo, ne-nula ukoliko se desila greška.Nula ukoliko je uspelo, ne-nula ukoliko se desila greška.

Greške:Greške:Iste kao i za mysql_real_connect().Iste kao i za mysql_real_connect().

Page 35: MySQL C API Izbor tipova i funkcija sa primerima

mysql_select_db()mysql_select_db()int mysql_select_db(MYSQL *mysql, const char *db)int mysql_select_db(MYSQL *mysql, const char *db)

Opis:Opis:Čini da baza koja je specificirana stringom na koji pokazuje Čini da baza koja je specificirana stringom na koji pokazuje dbdb postane default baza za zadatu konekciju. mysql_select_db() neće postane default baza za zadatu konekciju. mysql_select_db() neće uspeti ukoliko korisnik nema prava nad zadatom bazom.uspeti ukoliko korisnik nema prava nad zadatom bazom.

Povratne vrednosti:Povratne vrednosti:Nula za uspeh, ne nula ukoliko se javila neka greška.Nula za uspeh, ne nula ukoliko se javila neka greška.

Greške:Greške:Iste kao i kod mysql_real_query().Iste kao i kod mysql_real_query().

Page 36: MySQL C API Izbor tipova i funkcija sa primerima

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

Opis:Opis:

Ova funkcija je zastarela. Koristite mysql_real_query() umesto nje.Ova funkcija je zastarela. Koristite mysql_real_query() umesto nje.

Povratne vrednosti:Povratne vrednosti:

Iste kao i kod mysql_real_query().Iste kao i kod mysql_real_query().

Greške:Greške:

Iste kao i kod mysql_real_query().Iste kao i kod mysql_real_query().

Page 37: MySQL C API Izbor tipova i funkcija sa primerima

mysql_real_query()mysql_real_query()int mysql_real_query(MYSQL *mysql, const char *stmt_str, int mysql_real_query(MYSQL *mysql, const char *stmt_str, unsigned long length)unsigned long length)Opis:Opis:Izvršava SQL upit na koji ukazuje Izvršava SQL upit na koji ukazuje stmt_strstmt_str koji je string čija je dužina koji je string čija je dužina lengthlength. . StringString se mora sastojati od jednog upita i ne treba stavljati “;” se mora sastojati od jednog upita i ne treba stavljati “;” na kraj upita. mysql_query nemožemo koristiti za upite koji sadrže na kraj upita. mysql_query nemožemo koristiti za upite koji sadrže binarne podatkebinarne podatke (jer binarni podaci mogu sadržati “\0” karakter koji (jer binarni podaci mogu sadržati “\0” karakter koji bi mysql_query() interpretirao kao kraj stringa).bi mysql_query() interpretirao kao kraj stringa).Povratne vrednosti:Povratne vrednosti:Nula ukoliko je upit uspešan. Ne nula ukoliko nije.Nula ukoliko je upit uspešan. Ne nula ukoliko nije.Greške:Greške:CR_COMMANDS_OUT_OF_SYNCCR_COMMANDS_OUT_OF_SYNC

Komande su izvršavane pogrešnim redosledom.Komande su izvršavane pogrešnim redosledom.CR_SERVER_GONE_ERRORCR_SERVER_GONE_ERROR

MySQL server je nestao.MySQL server je nestao.CR_SERVER_LOSTCR_SERVER_LOST

Konekcija ka serveru je izgubljena za vreme izvršavanja upita.Konekcija ka serveru je izgubljena za vreme izvršavanja upita.CR_UNKNOWN_ERRORCR_UNKNOWN_ERROR

Nepoznata greška.Nepoznata greška.

Page 38: MySQL C API Izbor tipova i funkcija sa primerima

mysql_store_result()mysql_store_result()MYSQL_RES *mysql_store_result(MYSQL *mysql)MYSQL_RES *mysql_store_result(MYSQL *mysql)

Opis:Opis:Posle pozivanja funkcija mysql_query() ili mysql_real_query() Posle pozivanja funkcija mysql_query() ili mysql_real_query() moramo pozvati mysql_store_result() ili mysql_use_result() za svaki moramo pozvati mysql_store_result() ili mysql_use_result() za svaki upit koji vraća podatke (npr. SELECT, SHOW, DESCRIBE…). upit koji vraća podatke (npr. SELECT, SHOW, DESCRIBE…). Takođe, moramo pozvati mysql_free_result() kada završimo sa Takođe, moramo pozvati mysql_free_result() kada završimo sa obradom rezultata.obradom rezultata.mysql_store_result() iščitava čitav rezultat, alocira klijentovu mysql_store_result() iščitava čitav rezultat, alocira klijentovu memoriju za MYSQL_RES strukturu, i u nju upisuje rezultat. memoriju za MYSQL_RES strukturu, i u nju upisuje rezultat. mysql_store_result() vraća NULL pokazivač ukoliko upit nije vratio mysql_store_result() vraća NULL pokazivač ukoliko upit nije vratio rezultat (npr. UPDATE upit). Takođe, vraća NULL pokazivač i kada rezultat (npr. UPDATE upit). Takođe, vraća NULL pokazivač i kada se desi greška. Da bi proverili da li je došlo do greške možemo se desi greška. Da bi proverili da li je došlo do greške možemo koristiti mysql_error() ili mysql_errno(). Ukoliko naš SELECT upit koristiti mysql_error() ili mysql_errno(). Ukoliko naš SELECT upit nema rezultat, povratna vrednost mysql_store_result() funkcije će nema rezultat, povratna vrednost mysql_store_result() funkcije će biti prazna MYSQL_RES struktura.biti prazna MYSQL_RES struktura.

Page 39: MySQL C API Izbor tipova i funkcija sa primerima

Povratne vrednosti:Povratne vrednosti:MYSQL_RES struktura koja sadrži rezultat ukoliko nema gerške, MYSQL_RES struktura koja sadrži rezultat ukoliko nema gerške, odnosno NULL ukoliko se desila greška.odnosno NULL ukoliko se desila greška.

Greške:Greške:CR_COMMANDS_OUT_OF_SYNCCR_COMMANDS_OUT_OF_SYNC

Komande su izvršavane pogrešnim redosledom.Komande su izvršavane pogrešnim redosledom.CR_OUT_OF_MEMORYCR_OUT_OF_MEMORY

Nedostatak memorije.Nedostatak memorije.CR_SERVER_GONE_ERRORCR_SERVER_GONE_ERROR

MySQL server je nestao.MySQL server je nestao.CR_SERVER_LOSTCR_SERVER_LOST

Konekcija ka serveru je izgubljena za vreme izvršavanja upita.Konekcija ka serveru je izgubljena za vreme izvršavanja upita.CR_UNKNOWN_ERRORCR_UNKNOWN_ERROR

Nepoznata greška.Nepoznata greška.

Page 40: MySQL C API Izbor tipova i funkcija sa primerima

mysql_use_result()mysql_use_result()MYSQL_RES *mysql_use_result(MYSQL *mysql)MYSQL_RES *mysql_use_result(MYSQL *mysql)

Opis:Opis:Da bi pročitali rezultat upita koji smo napravili moramo koristiti ili Da bi pročitali rezultat upita koji smo napravili moramo koristiti ili mysql_store_result() funkciju ili mysql_use_result() funkciju.mysql_store_result() funkciju ili mysql_use_result() funkciju.mysql_use_result() inicijalizuje rezultat, ali ga, za razliku od mysql_use_result() inicijalizuje rezultat, ali ga, za razliku od mysql_store_result(), ne učitava u klijenta. Zato, kada koristimo mysql_store_result(), ne učitava u klijenta. Zato, kada koristimo mysql_use_result(), moramo učitavati red po red korišćenjem mysql_use_result(), moramo učitavati red po red korišćenjem funkcije mysql_fetch_row(). Ovaj način iščitavanja rezultata je nešto funkcije mysql_fetch_row(). Ovaj način iščitavanja rezultata je nešto brži i koristi znatno manje memorije od mysql_store_result() jer ne brži i koristi znatno manje memorije od mysql_store_result() jer ne koristi lokalni bafer. Sa druge strane ovaj način ne bi trebali da koristi lokalni bafer. Sa druge strane ovaj način ne bi trebali da koristimo ukoliko ćemo mnogo procesirati svaki red na klijentskoj koristimo ukoliko ćemo mnogo procesirati svaki red na klijentskoj strani jer na taj način onemogućavamo server da strani jer na taj način onemogućavamo server da updateupdate-uje bilo -uje bilo koju tabelu iz koje iščitavamo rezultat. koju tabelu iz koje iščitavamo rezultat. Kada korisitmo mysql_use_result() moramo izvršavati Kada korisitmo mysql_use_result() moramo izvršavati mysql_fetch_row() dok ne dobijemo NULL jer će nam u suprotnom mysql_fetch_row() dok ne dobijemo NULL jer će nam u suprotnom ne-preuzeti redovi sa servera stići sa sledećim upitom. Uz ovu ne-preuzeti redovi sa servera stići sa sledećim upitom. Uz ovu funkciju nemožemo koristiti neke funkcije (kao npr. funkciju nemožemo koristiti neke funkcije (kao npr. mysql_num_rows() ili mysql_affected_rows()).mysql_num_rows() ili mysql_affected_rows()).Kada završimo sa iščitavanjem rezultata trebamo pozvati Kada završimo sa iščitavanjem rezultata trebamo pozvati mysql_free_result().mysql_free_result().

Page 41: MySQL C API Izbor tipova i funkcija sa primerima

Povratne vrednosti:Povratne vrednosti:MYSQL_RES struktura u slučaju uspeha, NULL u suprotnom MYSQL_RES struktura u slučaju uspeha, NULL u suprotnom slučaju.slučaju.

Greške:Greške:CR_COMMANDS_OUT_OF_SYNCCR_COMMANDS_OUT_OF_SYNC

Komande su izvršavane pogrešnim redosledom.Komande su izvršavane pogrešnim redosledom.CR_OUT_OF_MEMORYCR_OUT_OF_MEMORY

Nedostatak memorije.Nedostatak memorije.CR_SERVER_GONE_ERRORCR_SERVER_GONE_ERROR

MySQL server je nestao.MySQL server je nestao.CR_SERVER_LOSTCR_SERVER_LOST

Konekcija ka serveru je izgubljena za vreme izvršavanja upita.Konekcija ka serveru je izgubljena za vreme izvršavanja upita.CR_UNKNOWN_ERRORCR_UNKNOWN_ERROR

Nepoznata greška.Nepoznata greška.

Page 42: MySQL C API Izbor tipova i funkcija sa primerima

mysql_errno()mysql_errno()unsigned int mysql_errno(MYSQL *mysql)unsigned int mysql_errno(MYSQL *mysql)

Opis:Opis:Za konekciju, specificiranu pomoću Za konekciju, specificiranu pomoću mysqlmysql argumenta, ova funkcija argumenta, ova funkcija će vratiti kod greške za poslednju korišćenu funkciju koja može da će vratiti kod greške za poslednju korišćenu funkciju koja može da vrati grešku. Ukoliko je povratna vrednost nula znači da do greške vrati grešku. Ukoliko je povratna vrednost nula znači da do greške nije ni došlo. Kodovi grešaka nastalih kod klijenta se nalaze u nije ni došlo. Kodovi grešaka nastalih kod klijenta se nalaze u errmsg.h errmsg.h header-header-u, a kodovi serverskih grešaka se nalaze u u, a kodovi serverskih grešaka se nalaze u mysql_error.h mysql_error.h header-header-u.u.

Povratne vrednosti:Povratne vrednosti:Kod greške ukoliko poslednja mysql_***() funkcija nije uspela, Kod greške ukoliko poslednja mysql_***() funkcija nije uspela, odnosno nula ukoliko jeste uspela.odnosno nula ukoliko jeste uspela.

Greške:Greške:Nema.Nema.

Page 43: MySQL C API Izbor tipova i funkcija sa primerima

mysql_error()mysql_error()const char *mysql_error(MYSQL *mysql)const char *mysql_error(MYSQL *mysql)

Opis:Opis:Za konekciju, specificiranu pomoću Za konekciju, specificiranu pomoću mysqlmysql argumenta, ova funkcija argumenta, ova funkcija će vratiti string koji sadrži opis greške koja se desila kod poslednje će vratiti string koji sadrži opis greške koja se desila kod poslednje API funkcije koja nije uspela. Ukoliko funkcija nije bila neuspešna API funkcije koja nije uspela. Ukoliko funkcija nije bila neuspešna povratna vrednost mysql_error() može biti prethodna greška ili povratna vrednost mysql_error() može biti prethodna greška ili prazan string koji ukazuje na to da nije bilo greške.prazan string koji ukazuje na to da nije bilo greške.

Povratne vrednosti:Povratne vrednosti:String koji opisuje grešku ili prazan string.String koji opisuje grešku ili prazan string.

Greške:Greške:Nema.Nema.

Page 44: MySQL C API Izbor tipova i funkcija sa primerima

mysql_affected_rows()mysql_affected_rows()my_ulonglong mysql_affected_rows(MYSQL *mysql)my_ulonglong mysql_affected_rows(MYSQL *mysql)

Opis:Opis:Posle izvršenog upita pomoću mysql_query() ili mysql_real_query(), Posle izvršenog upita pomoću mysql_query() ili mysql_real_query(), vraća broj redova koji su promenjeni (za UPDATE), izbrisani (za vraća broj redova koji su promenjeni (za UPDATE), izbrisani (za DELETE) ili ubačeni (za INSERT). U slučaju da smo izvšili SELECT DELETE) ili ubačeni (za INSERT). U slučaju da smo izvšili SELECT upit vraća istu vrednost kao i mysql_num_rows().upit vraća istu vrednost kao i mysql_num_rows().

Povratne vrednosti:Povratne vrednosti:Integer veći od nule označava broj redova koji su promenjeni, Integer veći od nule označava broj redova koji su promenjeni, izbrisani, ubačeni ili izabrani. Nula nam govori da nijedan red nije izbrisani, ubačeni ili izabrani. Nula nam govori da nijedan red nije promenjen u slučaju UPDATE upita, da nijedan red nije odgovarao promenjen u slučaju UPDATE upita, da nijedan red nije odgovarao WHERE klauzuli upita ili da nijedan upit još uvek nije izvršen. -1 WHERE klauzuli upita ili da nijedan upit još uvek nije izvršen. -1 označava da je query vratio geršku ili da je, za SELECT upit, označava da je query vratio geršku ili da je, za SELECT upit, mysql_affected_rows() pozvan pre mysql_store_result(). Pošto mysql_affected_rows() pozvan pre mysql_store_result(). Pošto mysql_affected_rows() vraća unsigned integer, da bi proverili da li je mysql_affected_rows() vraća unsigned integer, da bi proverili da li je vratio -1, rezultat moramo porediti sa (my_ulonglong) – 1.vratio -1, rezultat moramo porediti sa (my_ulonglong) – 1.

Greške:Greške:Nema.Nema.

Page 45: MySQL C API Izbor tipova i funkcija sa primerima

Primer:Primer:

char *poskupljenje = "UPDATE proizvodi SET cena=cena*1.25

WHERE grupa=10";

mysql_real_query (&mysql,poskupljenje,strlen(poskupljenje));

Printf (“Broj poskupelih proizvoda: %ld",

(long) mysql_affected_rows(&mysql));

Page 46: MySQL C API Izbor tipova i funkcija sa primerima

mysql_fetch_row()mysql_fetch_row()MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)

Opis:Opis:Vraća sledeći red iz rezultata. Ukoliko ga koristimo posle Vraća sledeći red iz rezultata. Ukoliko ga koristimo posle mysql_store_result(), ova funkcija će vratiti NULL kada više ne bude mysql_store_result(), ova funkcija će vratiti NULL kada više ne bude redova. Ukoliko ga koristimo posle mysql_use_result(), ova funkcija redova. Ukoliko ga koristimo posle mysql_use_result(), ova funkcija vraća NULL kada više nema redova ili ukoliko je došlo do greške. vraća NULL kada više nema redova ili ukoliko je došlo do greške. Povratne vrednosti:Povratne vrednosti:

MYSQL_ROW MYSQL_ROW struktura, ukoliko postoji, odnosno NULL ukoliko ne struktura, ukoliko postoji, odnosno NULL ukoliko ne postoji sledeći red ili ukoliko se desila greška.postoji sledeći red ili ukoliko se desila greška.

Greške:Greške:Obratiti pažnju na to da se greške ne resetuju između poziva ove Obratiti pažnju na to da se greške ne resetuju između poziva ove funkcije.funkcije.CR_SERVER_LOSTCR_SERVER_LOST

Konekcija prema serveru je izgubljena za vreme izvršavanja upita.Konekcija prema serveru je izgubljena za vreme izvršavanja upita.CR_UNKNOWN_ERRORCR_UNKNOWN_ERROR

Nepoznata greška.Nepoznata greška.

Page 47: MySQL C API Izbor tipova i funkcija sa primerima

mysql_fetch_field()mysql_fetch_field()MYSQL_FIELD *mysql_fetch_field(MYSQL_RES *result)MYSQL_FIELD *mysql_fetch_field(MYSQL_RES *result)

Opis:Opis:Vraća jednu kolonu rezultata u obliku Vraća jednu kolonu rezultata u obliku MYSQL_FIELDMYSQL_FIELD strukture. strukture. Ovom funkcijom možemo dobiti informacije o svim kolonama ukoliko Ovom funkcijom možemo dobiti informacije o svim kolonama ukoliko je pozivamo više puta na istom rezultatu. Vratiće NULL ukoliko je pozivamo više puta na istom rezultatu. Vratiće NULL ukoliko nema više kolona. Postavlja se da vraća informaciju o prvoj koloni nema više kolona. Postavlja se da vraća informaciju o prvoj koloni svaki put kad izvršimo novi SELECT upit. svaki put kad izvršimo novi SELECT upit.

Povratne vrednosti:Povratne vrednosti:MYSQL_FIELDMYSQL_FIELD struktura za trenutnu kolonu, NULL ukoliko nema struktura za trenutnu kolonu, NULL ukoliko nema više kolona.više kolona.

Greške:Greške:Nema.Nema.

Page 48: MySQL C API Izbor tipova i funkcija sa primerima

Primer:Primer:

MYSQL_FIELD *field;

while((field = mysql_fetch_field(result)))

{

printf("field name %s\n", field->name);

}

Page 49: MySQL C API Izbor tipova i funkcija sa primerima

mysql_fetch_lengths()mysql_fetch_lengths()unsigned long *mysql_fetch_lengths(MYSQL_RES *result)unsigned long *mysql_fetch_lengths(MYSQL_RES *result)

Opis:Opis:Vraća dužine kolona trenutnog reda iz rezultata. Ukoliko planiramo Vraća dužine kolona trenutnog reda iz rezultata. Ukoliko planiramo da kopiramo vrednosti polja ova informacija je korisna jer pomoću da kopiramo vrednosti polja ova informacija je korisna jer pomoću nje možemo izbeći korišćenje strlen() funkcije. Takođe, ukoliko nje možemo izbeći korišćenje strlen() funkcije. Takođe, ukoliko rezultat sadrži binarne podatke, moramo koristiti ovu funkciju da bi rezultat sadrži binarne podatke, moramo koristiti ovu funkciju da bi saznali veličinu podataka jer srtlen() neće vratiti tačnu vrednost za saznali veličinu podataka jer srtlen() neće vratiti tačnu vrednost za bilo koje polje koje sadrži NULL karaktere.bilo koje polje koje sadrži NULL karaktere.

Povratne vrednosti:Povratne vrednosti:Niz unsigned long integera koji predstavljaju dužinu svake kolone. Niz unsigned long integera koji predstavljaju dužinu svake kolone. NULL ukoliko je došlo do greške.NULL ukoliko je došlo do greške.

Greške:Greške:mysql_fetch_lengths() je validan samo za trenutni red rezultata. mysql_fetch_lengths() je validan samo za trenutni red rezultata. Vraća NULL ukoliko ga pozovemo pre poziva mysql_fetch_row() ili Vraća NULL ukoliko ga pozovemo pre poziva mysql_fetch_row() ili ako ga pozovemo posle uzimanja svih redova u rezultat.ako ga pozovemo posle uzimanja svih redova u rezultat.

Page 50: MySQL C API Izbor tipova i funkcija sa primerima

mysql_field_count()mysql_field_count()unsigned int mysql_field_count(MYSQL *mysql)unsigned int mysql_field_count(MYSQL *mysql)

Opis:Opis:

Vraća broj kolona za poslednji upit na konekciji.Vraća broj kolona za poslednji upit na konekciji.

Povratne vrednosti:Povratne vrednosti:

Unsigned integer koji predstavlja broj kolona u rezultatu.Unsigned integer koji predstavlja broj kolona u rezultatu.

Greške:Greške:

Nema.Nema.

Page 51: MySQL C API Izbor tipova i funkcija sa primerima

Primer:Primer:

MYSQL_RES *result;unsigned int num_rows;if (mysql_query(&mysql,query_string)) { // greska}else { // upit uspešan, obradi podatke result = mysql_store_result(&mysql); if (result) { // postoje redovi // obraditi podatke, zatim pozvati mysql_free_result(result) } else { // mysql_store_result() nije ništa vratio. da li je trebao? if(mysql_field_count(&mysql) == 0) { // upit ne vraća podatke, (nije bio SELECT upit) num_rows = mysql_affected_rows(&mysql); } else { // mysql_store_result() je trebao da vrati neke podatke fprintf(stderr, "Error: %s\n", mysql_error(&mysql)); } }}

Page 52: MySQL C API Izbor tipova i funkcija sa primerima

mysql_num_fields()mysql_num_fields()unsigned int mysql_num_fields(MYSQL_RES *result)unsigned int mysql_num_fields(MYSQL_RES *result)

Opis:Opis:

Vraća broj kolona u rezultatu.Vraća broj kolona u rezultatu.

Povratne vrednosti:Povratne vrednosti:

Unsigned integer kao broj kolona u rezultatu.Unsigned integer kao broj kolona u rezultatu.

Greške:Greške:

Nema.Nema.

Page 53: MySQL C API Izbor tipova i funkcija sa primerima

mysql_num_rows()mysql_num_rows()my_ulonglong mysql_num_rows(MYSQL_RES *result)my_ulonglong mysql_num_rows(MYSQL_RES *result)

Opis:Opis:

Vraća broj redova iz rezultata.Vraća broj redova iz rezultata.

Ukoliko smo koristili mysql_use_result() ova funkcija neće vratiti Ukoliko smo koristili mysql_use_result() ova funkcija neće vratiti tačnu vrednost dok ne preuzmemo sve redove iz rezultata.tačnu vrednost dok ne preuzmemo sve redove iz rezultata.

Povratne vrednosti:Povratne vrednosti:

Broj redova iz rezultata.Broj redova iz rezultata.

Greške:Greške:

Nema.Nema.

Page 54: MySQL C API Izbor tipova i funkcija sa primerima

mysql_free_result()mysql_free_result()void mysql_free_result(MYSQL_RES *result)void mysql_free_result(MYSQL_RES *result)

Opis:Opis:Oslobađa memoriju alociranu za rezultat koju su zauzele funkcije Oslobađa memoriju alociranu za rezultat koju su zauzele funkcije tipa mysql_store_result(), mysql_use_result(), mysql_list_dbs()…tipa mysql_store_result(), mysql_use_result(), mysql_list_dbs()…

Povratne vrednosti:Povratne vrednosti:Nema.Nema.

Greške:Greške:Nema.Nema.

Page 55: MySQL C API Izbor tipova i funkcija sa primerima

mysql_ping()mysql_ping()int mysql_ping(MYSQL *mysql)int mysql_ping(MYSQL *mysql)

Opis:Opis:Proverava da li veza sa serverom funkcioniše. Ukoliko je konekcija Proverava da li veza sa serverom funkcioniše. Ukoliko je konekcija prekinuta pokušava da se rekonektuje ukoliko auto-connect nije prekinuta pokušava da se rekonektuje ukoliko auto-connect nije isključen. isključen.

Povratne vrednosti:Povratne vrednosti:Nula ukoliko je konekcija još uvek prisutna. Ne nula ukoliko se Nula ukoliko je konekcija još uvek prisutna. Ne nula ukoliko se pojavila greška.pojavila greška.

Greške:Greške:CR_COMMANDS_OUT_OF_SYNCCR_COMMANDS_OUT_OF_SYNC

Komande su izvršavane pogrešnim redosledom.Komande su izvršavane pogrešnim redosledom.CR_SERVER_GONE_ERRORCR_SERVER_GONE_ERROR

MySQL server je nestao.MySQL server je nestao.CR_UNKNOWN_ERRORCR_UNKNOWN_ERROR

Nepoznata greška.Nepoznata greška.

Page 56: MySQL C API Izbor tipova i funkcija sa primerima

mysql_shutdown()mysql_shutdown()int mysql_shutdown(MYSQL *mysql, enum int mysql_shutdown(MYSQL *mysql, enum mysql_enum_shutdown_level shutdown_level)mysql_enum_shutdown_level shutdown_level)

Opis:Opis:Traži od servera da se ugasi. Konektovani korisnik mora imati Traži od servera da se ugasi. Konektovani korisnik mora imati privilegije za korišćenje ove funkcije. MySQL 5.1 serveri podržavaju privilegije za korišćenje ove funkcije. MySQL 5.1 serveri podržavaju samo jedan tip samo jedan tip shutdown-shutdown-a, pa a, pa shutdown_level shutdown_level mora biti SHUTDOWN_DEFAULT. Planira se da se mora biti SHUTDOWN_DEFAULT. Planira se da se uvedu novi nivoi gašenja servera.uvedu novi nivoi gašenja servera.

Povratne vrednosti:Povratne vrednosti:Nula za uspeh. Ne nula ukoliko je došlo do greške.Nula za uspeh. Ne nula ukoliko je došlo do greške.

Greške:Greške:Iste kao i kod mysql_real_query().Iste kao i kod mysql_real_query().