Funzionozze per interrogare MySQL con il C.
La lista completa delle funzioni sul sito di MySQL.
Prototipo di mysql_init(), per allocare memoria e inizializzare l’oggetto MYSQL.
proto: MYSQL *mysql_init(MYSQL *mysql)
Dopo aver inizializzato l’oggetto si puo’ creare la connessione al db con mysql_real_connect().
proto: 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)
Esempio: mysql_real_connect(&mysql, host, user, pass, db_name, 0, NULL, 0)
La query si chiama col prototipo che segue inserendo la stringa stmt_str e la lunghezza della stessa (es.: con strlen()). Se ritorna zero, la query è avvenuta.
proto: int mysql_real_query(MYSQL *mysql, const char *stmt_str,
unsigned long length)
L’analisi del risultato è un po’ macchinosa.
Il risultato della query viene incamerato grazie alla funzione mysql_store_result() che incamera i dati nella struct MYSQL_RES.
proto: MYSQL_RES *mysql_store_result(MYSQL *mysql)
Esempio:
MYSQL mysql; MYSQL_RES *result; [ blah blah blah... ] result = mysql_store_result(&mysql)
Notare che result rappresenta il risultato della query, sia esso
- Nullo perchè la query non è andata a buon fine
- Con dati causati da un SELECT o uno SHOW.
- Con risultato ma senza dati causato magari da un INSERT (che non spamma righe ma un risultato di righe modificate).
La struct MYSQL_RES di result puo’ venire esplorata con varie funzioni.
La funzione principale è probabilmente mysql_fetch_row(result) che estrae le singole righe dal result set.
proto: MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
Il numero di valori nella riga (i campi restituiti) è dato da mysql_num_fields(result) e mysql_num_rows() conta le righe restituite.
proto: unsigned int mysql_num_fields(MYSQL_RES *result) proto: my_ulonglong mysql_num_rows(MYSQL_RES *result)
Questo dovrebbe bastare per “navigare” i risultati della SELECT query (un bell’esempio per ciclare i risultati della query lo si trova in fondo alla pagina del fetch).
Per chiudere le operazioni, usare mysql_free_result(result) per liberare la memoria allocata per il result set e mysql_close(&mysql).
Aggiuntine.
mysql_fetch_result(result) parsa i campi.
proto: MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *result)
num_fields = mysql_num_fields(result);
fields = mysql_fetch_fields(result);
for(i = 0; i < num_fields; i++)
{
printf("Field %u is %s\n", i, fields[i].name);
}
Ho mille pensieri frullanti per la testa riguardanti la guerra a Gaza fra i palestinesi e gli israeliani.
Di sicuro non aggiungerei nulla a nessuna discussione – molto per ignoranza, e un po’ per miopia di vedute.
Traggo moltissime notizie dalla rete, opinioni valide e fatti più o meno attendibili (il web è stupendo in questo senso).
( Mi piacerebbe andare a trovare il mio amico e optometrista israeliano che non vedo – la battuta! – da tanto tempo e chiaccherare al riguardo, se volesse. )
In verità penso che i palestinesi guidati da Hamas si immolino senza speranza, penso che questo non li metta dalla parte della ragione, penso anche che Israele abbia la mano pesante e che naturalmente sono portato a dar ragione all’apparentemente piu’ debole – ma poi scazzo -, e penso che qualunque guerra renda molte discussioni prive di merito (es.: che non si possa parlare della proporzione del numero di vittime, leggere anche le vaccate di D’Alema qua).
Devo dire che la cosa piu’ chiara riguardo le motivazioni, l’ho poi letta qui, ed è talmente semplice e disarmante che mi sento solo di riportarla e piangerne:
Hamas che decide di accettare l’esistenza di Israele, è come il Vaticano che dice che Dio non esiste.
Bene (questo credo che tutti gli italiani siano in grado di capirlo).
Se è così, qualcuno mi spieghi come se ne esce.
PS: Anche Munich di Spielberg mi colpì molto sulla convinzione ideologica che permea la questione.
“Huston, I’ve a problem…”
I speak english as a beast.
Improve improve!
I will organize a rigid plan for language education at home.
DVDs, prepare yourself!
Gentleman, goodluck.
God help me. :_P
MySQL è the world’s most popular open source database.
C è un (il?) linguaggio di programmazione sviluppato da D. Ritchie per implementare Unix OS.
L’API è l’application programming interface.
Il file /usr/include/mysql/mysql.h è l’header che contiene classi, funzioni e variabili per mysql (#include <mysql/mysql.h>).
Il manualazzo delle API MySQL.
MYSQL è la struttura per maneggiare la connessione al database (le si associa una variabile, e ne si richiama l’indirizzo con l’operatore unario & ogni qual volta serva – cioè sempre).
typedef struct st_mysql
{
[... blah blah blah ...]
char *host,*user,*passwd,*unix_socket,*server_version,*host_info,*info;
char *db;
struct charset_info_st *charset;
MYSQL_FIELD *fields;
MEM_ROOT field_alloc;
my_ulonglong affected_rows;
[... blah blah blah ...]
my_bool free_me; /* If free in mysql_close */
my_bool reconnect; /* set to 1 if automatic reconnect */
/*
Points to boolean flag in MYSQL_RES or MYSQL_STMT. We set this flag
from mysql_stmt_close if close had to cancel result set of this object.
*/
my_bool *unbuffered_fetch_owner;
[... blah blah blah ...]
} MYSQL;
MYSQL_RES è la struttura rappresentante il risutlato di una query che ritorna delle righe (es. SELECT).
typedef struct st_mysql_res {
my_ulonglong row_count;
MYSQL_FIELD *fields;
MYSQL_DATA *data;
MYSQL_ROWS *data_cursor;
unsigned long *lengths; /* column lengths of current row */
MYSQL *handle; /* for unbuffered reads */
MEM_ROOT field_alloc;
unsigned int field_count, current_field;
MYSQL_ROW row; /* If unbuffered read */
MYSQL_ROW current_row; /* buffer to current row */
my_bool eof; /* Used by mysql_fetch_row */
/* mysql_stmt_close() had to cancel this result */
my_bool unbuffered_fetch_cancelled;
const struct st_mysql_methods *methods;
} MYSQL_RES;
MYSQL_ROW è un array che rappresenta una riga di dati.
typedef char **MYSQL_ROW; /* return data as array of strings */
Ci metto pure il MYSQL_FIELD, visto che viene considerato dalla struct RES.
typedef struct st_mysql_field {
char *name; /* Name of column */
char *org_name; /* Original column name, if an alias */
char *table; /* Table of column if column was a field */
char *org_table; /* Org table name, if table was an alias */
char *db; /* Database for table */
char *catalog; /* Catalog for table */
char *def; /* Default value (set by mysql_list_fields) */
[... blah blah blah ...]
enum enum_field_types type; /* Type of field. See mysql_com.h for types */
} MYSQL_FIELD;
snob, aggettivo e sostantivo maschile, forma invariante.
Si dice di chi, per esagerato rispetto della posizione sociale, ostenta raffinatezza, cercando di assumere atteggiamenti attribuiti a ceti superiori e di distinguersi e staccarsi da quanti considerati inferiori; anche, di ciò che è proprio di tali persone.
Voce inglese di origine scandinava indicante “calzolaio, persona volgare”, dapprima usata nel gergo studentesco per indicare gli estranei all’università (riferimento agli studenti di Oxford), poi diffusa in Europa col significato attuale, dal “Libro degli Snobs” di Thackeray (1848).
More »
Gironzolando per link mi sono imbattuto nel blog di Kaj Arnö (Vice Presidente per la Comunità di MySQL), e in una persona decisamente interessante.
Se vi interessa saperne di piu’ di chi è e cosa fa, andate qui.
Comunque, a parte questo, la cosa che più mi ha incuriosito è stata la sua volontà di comunicare – sfruttando gli strumenti tecnologici – con persone di cui non conosce la lingua.
Il blog di Kaj in italiano.
Il blog di Kaj in cirillico!
Il blog di Kaj in tedesco.
Fantastico!
L’altra cosa divertente, è vedere che altri seguono il suo esempio – anche se magari con meno costanza.
Il blog in svedese di gmax.
Considerando quanto sono codardo io con le lingue, nonostante i miei trascorsi abbastanza “viaggiosi”… ho tutto da imparare. Come sempre.
Un commento di Kaj sulle lingue:
The Why and How To of Localising Presentations beyond English
English as a language of communication is much overrated. In an international setting, English may be sufficient for conveying meaning, but it has severe deficiencies when it comes to establishing a social relationship, to showing respect, to building trust, and to having fun.
Stordito come una capra cascata di testa su di un masso, mi dimentico sempre qualcosa…
Ora, attraverso questo post-catarsi after figguddemmerd mi segno:
> dpkg -l | grep qualcosa_di_simile_a_nome_pacchetto
> dpkg -s nome_pacchetto
> dpkg -L nome_pacchetto
-L per vedere i files installati!!! Orco cane!
/usr/include/mysql/mysql.h
…e poi guardo quel che mi pare!