Hi all !
I would like to insert a Blob ( a picture exactly ), here is a small
source code to test my insert.
You can find 2 sources code, the first is to insert a blob in a table of
a database ( this database exists in my MySQL server )
And the second code is to read this blob from the database.
I think there are a lot of mistakes, could you help me ? because i did
not find the solution.
thanks
#include <mysql/mysql.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <glib.h>
int main(int argc, char **argv)
{
MYSQL *mysql = NULL;
struct stat statbuf;
int file;
unsigned long size, ssize;
gchar *data = NULL, *query = NULL, *end = NULL;
int i;
mysql = (MYSQL *) g_malloc0(sizeof(MYSQL));
mysql_init(mysql);
mysql = mysql_real_connect(mysql, "localhost","test", "XXXX",
"test_stef", 0, NULL, 0);
file = open("photo.png", O_RDONLY);
//file = open("test_mozilla.c", O_RDONLY);
if ( !file )
g_error("Impossible d'ouvrir le fichier photo.png");
fstat(file, &statbuf);
fprintf(stdout, "Size of photo.png : %ld\n", statbuf.st_size);
size = statbuf.st_size;
data = (gchar *) g_malloc0(size);
if ( !data )
g_error("Impossible de charger la m�moire requise");
ssize = read(file, data, size);
if ( ssize == size )
g_message("Fichier correctement lu");
query = (gchar *) g_malloc0(2*size);
strcpy(query, "INSERT INTO test VALUES(");
end = query + strlen(query);
*end++ = '\'';
gchar * debut, *fin;
debut = end;
end += mysql_real_escape_string(mysql, end, data, size);
fin = end;
fprintf(stdout, "Difference : %lu\n",(unsigned long) (fin - debut));
*end++ = '\'';
*end++ = ')';
/*for ( i = 0 ; i < 30 ; i++ )
fprintf(stdout, "%c", query[i]);*/
if ( mysql_real_query(mysql, query, (unsigned long) ( end - query )) )
{
g_error("Erreur lors de la requete d'insertion dans la DB");
}
g_free(data);
g_free(query);
mysql_close(mysql);
return 0;
}
But when i edit the mysql database with mysqlcc utility, i don't the
complete file.
now, when i read the Blob from the database, i use this source code.
#include <glib.h>
#include <mysql/mysql.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
MYSQL *mysql = NULL;
MYSQL_RES *mysql_res = NULL;
MYSQL_FIELD *mysql_field = NULL;
MYSQL_ROW *mysql_row = NULL;
gchar query[] = "SELECT photo FROM test";
mysql = (MYSQL *) g_malloc(sizeof(MYSQL));
mysql_init(mysql);
if( !mysql_real_connect(mysql, "localhost", "test", "XXXX",
"test_stef", 0, NULL, 0) )
g_error("Failed to connect to database : Error : %s\n",
mysql_error(mysql));
if (mysql_real_query(mysql, query, strlen(query)))
g_error("Failed query to database : Error : %s\n",
mysql_error(mysql));
if ( !(mysql_res = mysql_store_result(mysql)) )
g_error("Failed Store Result : Error : %s\n", mysql_error(mysql));
mysql_field = mysql_fetch_field(mysql_res);
g_print("Field name : %s\n", mysql_field->name);
mysql_row = mysql_fetch_row(mysql_res);
FILE *fichier;
fichier = fopen("photo_2.png", "wb");
fwrite(mysql_row[0], strlen(mysql_row[0]), 1, fichier);
fclose(fichier);
mysql_close(mysql);
g_free(mysql);
return 0;
}
Thanks
Stephane Wirtel
---------------------------------------------------------------------
Before posting, please check:
http://www.mysql.com/manual.php (the manual)
http://lists.mysql.com/ (the list archive)
To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php