|
|||||||
|
|
|
![]() |
|
|
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: 01:04.



















