begin process at 2008 08 28 23:12:39
1 233 430 membres
520 nouveaux aujourd'hui
14 291 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : image + char* + mysql [ Archives / Au secours ] (cartouh)

image + char* + mysql le 09/07/2003 18:09:02

cartouh
Hello

Voila, j'ai un big PRBLM!!!
je desire lire une image jpg et la stocker dans uune base mysql, tout simplement.
pour cela, je lis mon fichier que je stocke dans un buffer, et je l'ecris dans un autre char* qu'est la requete...
mais voila, quand je le li, strlen(buff) fait 9343o et dans la requete, il represente 4o!!!!!!!
il doit rencontrer des char bizarre et il zappe...
du coup, j'ai fait un codee mais ca ne marche pas plus:


CFile f("plop.jpg",CFile::modeRead);
char *buff = new char[f.GetLength()];
char *buff_tr = new char[f.GetLength()*2];

f.Read(buff, f.GetLength());

int i,j=0, longeur = f.GetLength();

for (i=0; i<longeur; i++)
{
if (buff[i] == ????)
{
buff_tr[j] = '\\';
j++;
buff_tr[j] = buff[i];
j++;
}
else
{
buff_tr[j] = buff[i];
j++;
}
}

char *requet = new char[f.GetLength()*2+100];

strcpy(requet, "UPDATE test SET image='");
strcat(requet, buff_tr);
strcat(requet, "' WHERE login=\"plop\"");
query.exec(requet);


dans les ??? j'ai essayer 0, '\'', '\"', '\\' sans succée!
si vous avez des idées de commen faire, je vous en serez tres reconnaissant!!

j'utilise Visual C++ 6.0,mysql++.lib, la classe ostream me met plein d'erreur, la fonction mysql_escape_string ne fonctionne pas....
je ne sais pas quoi faire!

help me plize!
mici

a++ les gens...

Re : image + char* + mysql le 09/07/2003 18:12:36

BruNews
(Admin CS)
pas de strlen sur du binaire, surtout dans une image, y a plein de zeros.
BruNews, ciao...


-------------------------------
Réponse au message :
-------------------------------

> Hello
>
> Voila, j'ai un big PRBLM!!!
> je desire lire une image jpg et la stocker dans uune base mysql, tout simplement.
> pour cela, je lis mon fichier que je stocke dans un buffer, et je l'ecris dans un autre char* qu'est la requete...
> mais voila, quand je le li, strlen(buff) fait 9343o et dans la requete, il represente 4o!!!!!!!
> il doit rencontrer des char bizarre et il zappe...
> du coup, j'ai fait un codee mais ca ne marche pas plus:
>
>

> CFile f("plop.jpg",CFile::modeRead);
> char *buff = new char[f.GetLength()];
> char *buff_tr = new char[f.GetLength()*2];
>
> f.Read(buff, f.GetLength());
>
> int i,j=0, longeur = f.GetLength();
>
> for (i=0; i<longeur; i++)
> {
> if (buff[i] == ????)
> {
> buff_tr[j] = '\\';
> j++;
> buff_tr[j] = buff[i];
> j++;
> }
> else
> {
> buff_tr[j] = buff[i];
> j++;
> }
> }
>
> char *requet = new char[f.GetLength()*2+100];
>
> strcpy(requet, "UPDATE test SET image='");
> strcat(requet, buff_tr);
> strcat(requet, "' WHERE login=\"plop\"");
> query.exec(requet);
>

>
> dans les ??? j'ai essayer 0, '\'', '\"', '\\' sans succée!
> si vous avez des idées de commen faire, je vous en serez tres reconnaissant!!
>
> j'utilise Visual C++ 6.0,mysql++.lib, la classe ostream me met plein d'erreur, la fonction mysql_escape_string ne fonctionne pas....
> je ne sais pas quoi faire!
>
> help me plize!
> mici
>
> a++ les gens...
>

Re : image + char* + mysql le 09/07/2003 19:24:18

Kaid
Comme te l'a expliqué BruNews, ca ne marchera jamais à cause des '\0'. Je te suggère une solution, je ne sais pas si ca marche, pour remplacer ton UPDATE.



// Exemple de requête
const char strQuery[]=UPDATE test SET image='?' WHERE login='plop'";

// Création du statement
MYSQL_STMT * mysql_prepare(MYSQL *mysql, const char *query, unsigned long length)

// Attacher le paramètre
int mysql_bind_param(MYSQL_STMT *stmt, MYSQL_BIND *bind)

// Exécution du statement
int mysql_execute(MYSQL_STMT *stmt.


Kaid - kaid.fr.st

-------------------------------
Réponse au message :
-------------------------------

> Hello
>
> Voila, j'ai un big PRBLM!!!
> je desire lire une image jpg et la stocker dans uune base mysql, tout simplement.
> pour cela, je lis mon fichier que je stocke dans un buffer, et je l'ecris dans un autre char* qu'est la requete...
> mais voila, quand je le li, strlen(buff) fait 9343o et dans la requete, il represente 4o!!!!!!!
> il doit rencontrer des char bizarre et il zappe...
> du coup, j'ai fait un codee mais ca ne marche pas plus:
>
>

> CFile f("plop.jpg",CFile::modeRead);
> char *buff = new char[f.GetLength()];
> char *buff_tr = new char[f.GetLength()*2];
>
> f.Read(buff, f.GetLength());
>
> int i,j=0, longeur = f.GetLength();
>
> for (i=0; i<longeur; i++)
> {
> if (buff[i] == ????)
> {
> buff_tr[j] = '\\';
> j++;
> buff_tr[j] = buff[i];
> j++;
> }
> else
> {
> buff_tr[j] = buff[i];
> j++;
> }
> }
>
> char *requet = new char[f.GetLength()*2+100];
>
> strcpy(requet, "UPDATE test SET image='");
> strcat(requet, buff_tr);
> strcat(requet, "' WHERE login=\"plop\"");
> query.exec(requet);
>

>
> dans les ??? j'ai essayer 0, '\'', '\"', '\\' sans succée!
> si vous avez des idées de commen faire, je vous en serez tres reconnaissant!!
>
> j'utilise Visual C++ 6.0,mysql++.lib, la classe ostream me met plein d'erreur, la fonction mysql_escape_string ne fonctionne pas....
> je ne sais pas quoi faire!
>
> help me plize!
> mici
>
> a++ les gens...
>

Re : image + char* + mysql le 10/07/2003 10:42:46

cartouh
Salut,

merci de votrte attention...

mais je ne comprend pas trop ton code...


> // Exemple de requête
> const char strQuery[]="UPDATE test SET image='?' WHERE login='plop'";

la ok, tu fait un template c'est ca?
ou alors je comprend pas... tu met koi dans le '?' ou c'est pour plus tard...

> // Création du statement
> MYSQL_STMT * mysql_prepare(mysql, strQuery, unsigned long length);

la je comprend plus trop....
Les parametres, c koi le unsigned long lenght??
c la longeur de koi?
et puis Visual il me dit: error C2065: 'MYSQL_STMT' : undeclared identifier


> // Attacher le paramètre
> int mysql_bind_param(mysql_prepare, MYSQL_BIND *bind);

tu attache le parametre a un etat declaré avant, la ok
mais, c'est koi le bind?
et puis tjrs: error C2065: 'MYSQL_BIND' : undeclared identifier

[Coded]> // Exécution du statement
> int mysql_execute(mysql_prepare);

et la tu execute l'etat, oki...

mais ce que je ne comprend pas trop:
- quand est ce que tu atache le char* buff à la requete??

si tu peux voir cec qui va pas...
mici

tiens tant que j'y suis, j'ai reussi à mettre la classe fstream (prblm de declaration dans plusierus lib)
et j'ai mis le code de l'exemple de mysql++:

ostrstream strbuf;
ifstream In ("plop.jpg",ios::in | ios::binary);
struct stat for_len;
if ((In.rdbuf())->is_open())
{
if (stat ("plop.jpg",&for_len) == -1) return false;
unsigned int blen = for_len.st_size;
if (!blen) return false;
char *read_buffer = new char[blen];
In.read(read_buffer,blen);
string fill(read_buffer,blen);
strbuf << "UPDATE test SET image='" << escape << fill << "' WHERE login='plop'";
query.exec(strbuf.str());
delete[] read_buffer;
}

ET CA MARCHE PAS...
il me met toujours 4caracteres dans le champ image, et pas tout....

AU SECOURS!!!!!!!!!!!!!!!!!!!!!!!!!!

a++ les gens...



-------------------------------
Réponse au message :
-------------------------------

> Comme te l'a expliqué BruNews, ca ne marchera jamais à cause des '\0'. Je te suggère une solution, je ne sais pas si ca marche, pour remplacer ton UPDATE.
>
>
>
> // Exemple de requête
> const char strQuery[]=UPDATE test SET image='?' WHERE login='plop'";
>
> // Création du statement
> MYSQL_STMT * mysql_prepare(MYSQL *mysql, const char *query, unsigned long length)
>
> // Attacher le paramètre
> int mysql_bind_param(MYSQL_STMT *stmt, MYSQL_BIND *bind)
>
> // Exécution du statement
> int mysql_execute(MYSQL_STMT *stmt.
>

>
> Kaid - kaid.fr.st
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > Hello
> >
> > Voila, j'ai un big PRBLM!!!
> > je desire lire une image jpg et la stocker dans uune base mysql, tout simplement.
> > pour cela, je lis mon fichier que je stocke dans un buffer, et je l'ecris dans un autre char* qu'est la requete...
> > mais voila, quand je le li, strlen(buff) fait 9343o et dans la requete, il represente 4o!!!!!!!
> > il doit rencontrer des char bizarre et il zappe...
> > du coup, j'ai fait un codee mais ca ne marche pas plus:
> >
> >

> > CFile f("plop.jpg",CFile::modeRead);
> > char *buff = new char[f.GetLength()];
> > char *buff_tr = new char[f.GetLength()*2];
> >
> > f.Read(buff, f.GetLength());
> >
> > int i,j=0, longeur = f.GetLength();
> >
> > for (i=0; i<longeur; i++)
> > {
> > if (buff[i] == ????)
> > {
> > buff_tr[j] = '\\';
> > j++;
> > buff_tr[j] = buff[i];
> > j++;
> > }
> > else
> > {
> > buff_tr[j] = buff[i];
> > j++;
> > }
> > }
> >
> > char *requet = new char[f.GetLength()*2+100];
> >
> > strcpy(requet, "UPDATE test SET image='");
> > strcat(requet, buff_tr);
> > strcat(requet, "' WHERE login=\"plop\"");
> > query.exec(requet);
> >

> >
> > dans les ??? j'ai essayer 0, '\'', '\"', '\\' sans succée!
> > si vous avez des idées de commen faire, je vous en serez tres reconnaissant!!
> >
> > j'utilise Visual C++ 6.0,mysql++.lib, la classe ostream me met plein d'erreur, la fonction mysql_escape_string ne fonctionne pas....
> > je ne sais pas quoi faire!
> >
> > help me plize!
> > mici
> >
> > a++ les gens...
> >
>

Re : image + char* + mysql le 10/07/2003 14:06:45

Kaid
Je t'ai simplement mis une idée, je ne sais pas si c'est possible. N'ayant pas de base MySQL sous la main (n'ayant pas envie d'en installer une non plus), je t'ai simplement mis les prototypes des fonctions MySQL à appeller, que j'ai trouvé dans la documentation. A toi de bien utiliser ces fonctions.

Kaid - kaid.fr.st

-------------------------------
Réponse au message :
-------------------------------

> Salut,
>
> merci de votrte attention...
>
> mais je ne comprend pas trop ton code...
>
>
>
> // Exemple de requête
> > const char strQuery[]="UPDATE test SET image='?' WHERE login='plop'";

> la ok, tu fait un template c'est ca?
> ou alors je comprend pas... tu met koi dans le '?' ou c'est pour plus tard...
>
>
> // Création du statement
> > MYSQL_STMT * mysql_prepare(mysql, strQuery, unsigned long length);

> la je comprend plus trop....
> Les parametres, c koi le unsigned long lenght??
> c la longeur de koi?
> et puis Visual il me dit: error C2065: 'MYSQL_STMT' : undeclared identifier
>
>
>
> // Attacher le paramètre
> > int mysql_bind_param(mysql_prepare, MYSQL_BIND *bind);

> tu attache le parametre a un etat declaré avant, la ok
> mais, c'est koi le bind?
> et puis tjrs: error C2065: 'MYSQL_BIND' : undeclared identifier
>
> [Coded]> // Exécution du statement
> > int mysql_execute(mysql_prepare);

> et la tu execute l'etat, oki...
>
> mais ce que je ne comprend pas trop:
> - quand est ce que tu atache le char* buff à la requete??
>
> si tu peux voir cec qui va pas...
> mici
>
> tiens tant que j'y suis, j'ai reussi à mettre la classe fstream (prblm de declaration dans plusierus lib)
> et j'ai mis le code de l'exemple de mysql++:
>

> ostrstream strbuf;
> ifstream In ("plop.jpg",ios::in | ios::binary);
> struct stat for_len;
> if ((In.rdbuf())->is_open())
> {
> if (stat ("plop.jpg",&for_len) == -1) return false;
> unsigned int blen = for_len.st_size;
> if (!blen) return false;
> char *read_buffer = new char[blen];
> In.read(read_buffer,blen);
> string fill(read_buffer,blen);
> strbuf << "UPDATE test SET image='" << escape << fill << "' WHERE login='plop'";
> query.exec(strbuf.str());
> delete[] read_buffer;
> }
>

> ET CA MARCHE PAS...
> il me met toujours 4caracteres dans le champ image, et pas tout....
>
> AU SECOURS!!!!!!!!!!!!!!!!!!!!!!!!!!
>
> a++ les gens...
>
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > Comme te l'a expliqué BruNews, ca ne marchera jamais à cause des '\0'. Je te suggère une solution, je ne sais pas si ca marche, pour remplacer ton UPDATE.
> >
> >
> >
> > // Exemple de requête
> > const char strQuery[]=UPDATE test SET image='?' WHERE login='plop'";
> >
> > // Création du statement
> > MYSQL_STMT * mysql_prepare(MYSQL *mysql, const char *query, unsigned long length)
> >
> > // Attacher le paramètre
> > int mysql_bind_param(MYSQL_STMT *stmt, MYSQL_BIND *bind)
> >
> > // Exécution du statement
> > int mysql_execute(MYSQL_STMT *stmt.
> >

> >
> > Kaid - kaid.fr.st
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > Hello
> > >
> > > Voila, j'ai un big PRBLM!!!
> > > je desire lire une image jpg et la stocker dans uune base mysql, tout simplement.
> > > pour cela, je lis mon fichier que je stocke dans un buffer, et je l'ecris dans un autre char* qu'est la requete...
> > > mais voila, quand je le li, strlen(buff) fait 9343o et dans la requete, il represente 4o!!!!!!!
> > > il doit rencontrer des char bizarre et il zappe...
> > > du coup, j'ai fait un codee mais ca ne marche pas plus:
> > >
> > >

> > > CFile f("plop.jpg",CFile::modeRead);
> > > char *buff = new char[f.GetLength()];
> > > char *buff_tr = new char[f.GetLength()*2];
> > >
> > > f.Read(buff, f.GetLength());
> > >
> > > int i,j=0, longeur = f.GetLength();
> > >
> > > for (i=0; i<longeur; i++)
> > > {
> > > if (buff[i] == ????)
> > > {
> > > buff_tr[j] = '\\';
> > > j++;
> > > buff_tr[j] = buff[i];
> > > j++;
> > > }
> > > else
> > > {
> > > buff_tr[j] = buff[i];
> > > j++;
> > > }
> > > }
> > >
> > > char *requet = new char[f.GetLength()*2+100];
> > >
> > > strcpy(requet, "UPDATE test SET image='");
> > > strcat(requet, buff_tr);
> > > strcat(requet, "' WHERE login=\"plop\"");
> > > query.exec(requet);
> > >

> > >
> > > dans les ??? j'ai essayer 0, '\'', '\"', '\\' sans succée!
> > > si vous avez des idées de commen faire, je vous en serez tres reconnaissant!!
> > >
> > > j'utilise Visual C++ 6.0,mysql++.lib, la classe ostream me met plein d'erreur, la fonction mysql_escape_string ne fonctionne pas....
> > > je ne sais pas quoi faire!
> > >
> > > help me plize!
> > > mici
> > >
> > > a++ les gens...
> > >
> >
>


Classé sous : mysql, char, tr, buff, getlength

Participer à cet échange

Pub



Appels d'offres

Recherche developpeur ...
Budget : 700€
SITE MARCHAND LOCATION...
Budget : 3 000€
SITE MARCHAND POUR HOTEL
Budget : 4 000€

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

Boutique

Boutique de goodies CodeS-SourceS