cartouh
Messages postés24Date d'inscriptionjeudi 27 février 2003StatutMembreDernière intervention27 janvier 2004
-
9 juil. 2003 à 18:09
cs_Kaid
Messages postés949Date d'inscriptionmardi 2 octobre 2001StatutMembreDernière intervention 8 juillet 2006
-
10 juil. 2003 à 14:06
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] == <s>????</s> )
{
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,/index.html mysql++.lib, la classe ostream me met plein d'erreur, la fonction mysql_escape_string ne fonctionne pas....
je ne sais pas quoi faire!
cs_Kaid
Messages postés949Date d'inscriptionmardi 2 octobre 2001StatutMembreDernière intervention 8 juillet 20061 9 juil. 2003 à 19:24
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.
cartouh
Messages postés24Date d'inscriptionjeudi 27 février 2003StatutMembreDernière intervention27 janvier 2004 10 juil. 2003 à 10:42
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);</td></tr></table>
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....
cs_Kaid
Messages postés949Date d'inscriptionmardi 2 octobre 2001StatutMembreDernière intervention 8 juillet 20061 10 juil. 2003 à 14:06
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.