|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Sep 2006
Messaggi: 72
|
[C] Come usare Prepared Statement con "mysql.h"
salve a tutti,
vorrei riuscire a capire come poter utilizzare i prepared statement... ho letto la documentazione ma sinceramente anche seguendo il loro codice ci ho capito ben poco... cmq vi metto un codice di esempio per riuscire a capire dove sbaglio Codice:
//mi connetto al database conn = mysql_init(NULL); //preparo la query sprintf(myquery,"SELECT password FROM accesso WHERE id_doc=?"); //inizializzo lo statement stmt = mysql_stmt_init(conn); mysql_stmt_prepare(stmt, myquery, strlen(myquery)) //conto i parametri, in questo caso 1 solo, passaggio fatto solo per la verifica param_count= mysql_stmt_param_count(stmt); //preparo l'unico parametro che è una stringa memset(bind, 0, sizeof(bind)); bind[0].buffer_type= MYSQL_TYPE_STRING; bind[0].buffer= (char *)str_data; bind[0].buffer_length= 10; bind[0].is_null= 0; bind[0].length= &str_length; mysql_stmt_bind_param(stmt, bind) //setto il parametro (anche se questo passaggio a senso dovrebbe essere fatto prima, ma così dice la documentazione) strncpy(str_data, "123", 10); /* string */ str_length= strlen(str_data); //eseguo la query mysql_stmt_execute(stmt) //prendo i risultati res = mysql_use_result(conn); //li stampo printf("MySQL Tables in mysql database:\n"); while ((row = mysql_fetch_row(res)) != NULL) printf("%s \n", row[1]); /* close connection */ mysql_free_result(res); mysql_close(conn); ![]() se riuscite a darmi una mano ve ne sarei molto molto grato!!! |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Sep 2006
Messaggi: 72
|
Risolto!!!
![]() Questo è il link dove ho trovato un esempio che mi ha illuminato... praticamente sbagliavo a prendere i risultati... devono anch'essi essere trattati come parametri bind... dato che ho fatto la prova solo con degli int spero che nn sorgano problemi con le stringhe ![]() |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Sep 2006
Messaggi: 72
|
Sembrava Risolto...
sono riuscito a scrivere e a far andare il codice ma non capisco per quale motivo mi da 0 risultati quando invece nel mio database ce ne sono 2... here is my code Codice:
#include <stdlib.h> #include <stdio.h> #include <string.h> #include <mysql/mysql.h> #define STRING_SIZE 50 #define SELECT_SAMPLE "select p.id_paz from pazienti p where p.id_doc = ?" int main(void) { MYSQL *conn; MYSQL_STMT *stmt; MYSQL_BIND pbind[1],result[1]; /* results */ unsigned long length; int row_count; char login[STRING_SIZE]; my_bool is_null; //MYSQL_BIND pbind[2]; /* parameters */ unsigned long plength; char *pdata; my_bool p_is_null; // Open Database const char *server = "localhost"; char *user = "root"; char *password = "password"; /* set me first */ char *database = "ProgettoSi"; conn = mysql_init(NULL); /* Connect to database */ if (!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0)) { fprintf(stderr, "%s\n", mysql_error(conn)); exit(1); } // Allocate statement handler stmt = mysql_stmt_init(conn); if (!stmt) { fprintf(stderr, " mysql_stmt_init(), out of memory\n"); exit(0); } if (mysql_stmt_prepare(stmt, SELECT_SAMPLE, strlen(SELECT_SAMPLE))) { fprintf(stderr, " mysql_stmt_prepare(), SELECT failed\n"); fprintf(stderr, " %s\n", mysql_stmt_error(stmt)); exit(0); } fprintf(stdout, " prepare, SELECT successful\n"); plength = STRING_SIZE * sizeof(char); p_is_null = 0; pdata = (char*)malloc( STRING_SIZE * sizeof(char) ); /* STRING PARAMETER */ pbind[0].buffer_type= MYSQL_TYPE_STRING; pbind[0].buffer= (char *)pdata; pbind[0].buffer_length=STRING_SIZE * sizeof(char); pbind[0].is_null= &p_is_null; pbind[0].length= &plength; if( mysql_stmt_bind_param( stmt, pbind ) ) { fprintf( stderr, " mysql_stmt_bind_param() failed\n" ); fprintf( stderr, " %s\n", mysql_stmt_error( stmt ) ); exit(0); } mysql_real_escape_string( conn, pdata, "123", strlen("123")*sizeof(char) ); plength = strlen( pdata ) + 1; printf( "Executing query with parameters %s. \n", pdata); /* Execute the SELECT query */ if (mysql_stmt_execute(stmt)) { fprintf(stderr, " mysql_stmt_execute(), failed\n"); fprintf(stderr, " %s\n", mysql_stmt_error(stmt)); exit(0); } /* Bind the result buffers for all 4 columns before fetching them */ result[0].buffer_type= MYSQL_TYPE_STRING; result[0].buffer= (char *)login; result[0].buffer_length= STRING_SIZE; result[0].is_null= &is_null; result[0].length= &length; if (mysql_stmt_bind_result(stmt, result)) { fprintf(stderr, " mysql_stmt_bind_result() failed\n"); fprintf(stderr, " %s\n", mysql_stmt_error(stmt)); exit(0); } if (mysql_stmt_store_result(stmt)) { fprintf(stderr, " mysql_stmt_store_result() failed\n"); fprintf(stderr, " %s\n", mysql_stmt_error(stmt)); exit(0); } row_count= 0; fprintf(stdout, "Fetching results ...\n"); while (!mysql_stmt_fetch(stmt)) { row_count++; fprintf(stdout, " row %d\n", row_count); /* column 2 */ fprintf(stdout, " column2 (string) : "); if (is_null) fprintf(stdout, " NULL\n"); else fprintf(stdout, " %s(%ld)\n", login, length); } /* Validate rows fetched */ fprintf(stdout, " total rows fetched: %d\n", row_count); /* Close the statement */ if (mysql_stmt_close(stmt)) { fprintf(stderr, " failed while closing the statement\n"); fprintf(stderr, " %s\n", mysql_stmt_error(stmt)); exit(0); } return 0; } |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:12.