- 论坛徽章:
- 0
|
我往数据库里面插入了图象数据,图片是以二进制的形式打开的,写进去,读出来检查其
大小都是对的,但是我读出的文件显示的时候什么都没有,不知道是为什么?
代码是网上的一个大家都用的例子:
#include <stdio.h>
#include <string.h>
#include <mysql/my_global.h>
#include <mysql/mysql.h>
void
load_image(MYSQL *conn, FILE *f)
{
int ret;
char query[1024*200], buf[1024*100], *p;
unsigned long from_len;
sprintf(query, "insert into pictest(pic) values ( \'");
p = query + strlen(query);
while ((from_len = fread(buf, 1, sizeof(buf), f)) > 0)
{
if (p + (2 * from_len) + 3 > query + sizeof(query))
{
printf("image too big");
return;
}
p += mysql_real_escape_string(conn, p, buf, from_len);
}
*p++ = '\'';
*p++ = ')';
printf("query:%d\n", strlen(query));
//strcpy(p, " where img_id = 1");
if((ret = mysql_real_query(conn, query, (unsigned long)(p - query))) != 0)
printf("query error!\n");
}
int
main()
{
char *opt_host_name = "192.168.168.211";
char *opt_user_name = "mahatma";
char *opt_password = NULL;
unsigned int opt_port_num = 3306;
char *opt_socket_name = NULL;
char *opt_db_name = "test";
unsigned int opt_flags = 0;
MYSQL *conn;
FILE *f;
conn = mysql_init(NULL);
mysql_real_connect(conn, opt_host_name, opt_user_name, opt_password,
opt_db_name, opt_port_num, opt_socket_name, opt_flags);
printf("connect the database ok\n");
if ((f = fopen("/home/wang/1.jpg", "rb")) == NULL)
{
printf("file open error!");
return 1;
}
load_image(conn, f);
fclose(f);
mysql_close(conn);
return 0;
}
然后用这个命令从数据库中把文件读出来:
select pic from pictest into outfile"/home/mahatma/1.jpg";
但是在打开的时候,发现啥显示也没有
但这个文件大小与我读进去的大小是相同的,我怀疑可以是mysql_real_escape_string这
个函数把格式给我转化了一下,大家看看,帮我找找原因呢
谢谢了
-- |
|