PDA

View Full Version : [C] Mysql


Metal2001
01-02-2009, 11:14
Devo fare un programma in C che prende come parametro una stringa,interroga il database Mysql e mi restituisce la tupla contenete quel valore

Questa versione è con valori numerici (del tipo "del tipo restituisci l'impiegato con ID=X,dove X è un numero e lo passo cosi: "./eseguibile X")
Se al posto di un numero dovessi inserire dei caratteri le virgolette "" mi creano dei problemi perchè non riesco ad inserirle nella query sql, come posso fare?
#include <mysql.h>
#include <stdio.h>
#include <stdlib.h>

main(int argc,char *argv[]) {
MYSQL *conn;
MYSQL_RES *res;
MYSQL_ROW row;
char *server = "localhost";
char *user = "root";
char *password = "xxx";
char *database = "DB1";
char sql[80];
strcpy(sql,"SELECT * FROM PROVA WHERE ID=");
strcat(sql,argv[1]);
conn = mysql_init(NULL);

if (!mysql_real_connect(conn, server,user, password, database, 0, NULL, 0))
{
fprintf(stderr, "%s\n", mysql_error(conn));
exit(0);
}

if (mysql_query(conn, sql)) {
fprintf(stderr, "%s\n", mysql_error(conn));
exit(0);
}
res = mysql_use_result(conn);

while ((row = mysql_fetch_row(res)) != NULL)
printf("%s %s %s %s\n", row[0], row[1], row[2], row[3]);

mysql_free_result(res);
mysql_close(conn);
}

CozzaAmara
01-02-2009, 11:30
Però in teoria tu dovresti già sapere se il campo su cui effettui la ricerca è di tipo numerico oppure no, o meglio se il valore che passi all'interno della query è un numero o una stringa giusto?

In teoria ID dovrebbe far riferimento sempre ad un numero quindi non vedo il problema.

Nel caso potresti intercettare prima il valore ed in base al suo tipo effettuare o meno un escape della stringa.

Oppure ancora considerare il valore che passi sempre come stringa tanto MySQL recupera il risultato comunque:

es:
SELECT * FROM PROVA WHERE ID='5'
SELECT * FROM PROVA WHERE ID='pippo'

Nel caso di campo numerico la query sarà solo un pò meno efficiente.

Metal2001
01-02-2009, 11:51
il codice che ho scritto sopra è con i numeri e funziona perfettamente, mentre se lo modifico e all'interno della query metto Nome al posto di ID,quando eseguo il programma digitando:
./programma Antonio
./programma 'Antonio'
./programma "Antonio"

Il risultato è sempre unknown column 'Antonio', in where clause

Non posso mettere tutto dentro la query perchè il programma lo devo fare con la variabile da passare

Metal2001
01-02-2009, 16:23
risolto con la funzione sprintf
potete chiudere