Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista
Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista
Il nuovo top di gamma vivo punta su un comparto fotografico particolarmente articolato, con un teleobiettivo da 200 megapixel e teleconvertitori esterni capaci di arrivare a 400 mm equivalenti. Lo abbiamo provato a Tenerife, mettendo alla prova fotocamere, prestazioni, autonomia e accessori. Ecco come si è comportato.
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
Un mondo affollato e vivo, personaggi destinati a sparire a fine test e nessuno a inseguire l'oggetto giusto. Beta e stress test di World of Warcraft: Forever hanno fatto emergere un roleplay spontaneo, tra danze a Goldshire e code ordinate ai PNG
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
In tre giorni a Las Vegas Oracle ha presentato agenti che eseguono il lavoro, l'alleanza con OpenAI e un cloud aperto agli acceleratori di tutti. Ma i clienti europei chiedono garanzie prima ancora delle funzionalità
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 05-01-2012, 12:26   #1
lorien3
Member
 
L'Avatar di lorien3
 
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);
il grosso problema è che quando vado a stampare mi da segmentation fault proprio perchè non ci sono risultati...

se riuscite a darmi una mano ve ne sarei molto molto grato!!!
lorien3 è offline   Rispondi citando il messaggio o parte di esso
Old 05-01-2012, 13:11   #2
lorien3
Member
 
L'Avatar di lorien3
 
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
lorien3 è offline   Rispondi citando il messaggio o parte di esso
Old 05-01-2012, 16:25   #3
lorien3
Member
 
L'Avatar di lorien3
 
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;
}
lorien3 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista Recensione vivo X500 Pro Max: la fotografia mobi...
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà WoW Forever: la beta è stato uno dei mome...
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA Oracle AI World 2026: in Europa prima la sovrani...
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort DS N°7 E-Tense: il SUV premium made in Melfi...
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più Recensione Samsung Galaxy Tab S12 Ultra: non chi...
La sonda spaziale NASA Lucy ha raggiunto...
Le GeForce RTX 5000 scarseggiano, tornan...
Raspberry Pi 5, il prezzo è ormai...
I frigoriferi dei supermercati diventano...
Le vecchie fotocamere digitali compatte ...
La Cina potrebbe rinviare il ritorno del...
Verizon non è preoccupata della c...
RDNA 5 sulle APU AMD, ma non per tutti: ...
Marvell acquisisce Lumentum per 115 mili...
La febbre dei data center fa impennare i...
ECOVACS T90S OMNI crolla a 499€ su Amazo...
In Cina i camion elettrici hanno gi&agra...
Attacchi hacker ai supermercati in Europ...
I datacenter non piacciono? OpenAI prova...
Cupra Raval sfida BMW, Volvo e le altre:...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 01:15.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v