怎么用MYSQL C API往表里插入blob数据?我这样做为什么失败?

cd2108006026 2010-06-03 05:14:04
obj是一个结构体对象
struct blob
{
int a;
int b;
}obj = {1,2};

blobtest 是表的名字;表有两个属性,第一个是integer,第二个是blob


unsigned short current_length = 0;
const char * head= "INSERT INTO blobtest VALUES(6,";
const char * tail= ")";

char sql[128] = {0};//最终的sql语句
memcpy(sql, head, strlen(head));
current_length += strlen(head);

mysql_real_escape_string(handle, sql+current_length, (char *)&obj, sizeof(obj));
current_length += sizeof(obj);

memcpy(sql+current_length, tail, strlen(tail));
current_length += strlen(tail);

sql[current_length] = '\0';

mysql_real_query(handle, sql, current_length);
...全文
188 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
iihero_ 2010-06-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 cd2108006026 的回复:]
语句是这样的“INSERT INTO blobtest VALUES(6,\001\\0\\0\\0bcde);”
[/Quote]

还是没有引号吗?还是说有了绰号也是上边的错。
cd2108006026 2010-06-04
  • 打赏
  • 举报
回复
多谢ACMAIN_CHM, 对了!!
cd2108006026 2010-06-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 acmain_chm 的回复:]
INSERT INTO blobtest VALUES(6,'\001\\0\\0\\0bcde')

引号哪去了? 你的SQL语句生成的不对,


C/C++ code
const char * head= "INSERT INTO blobtest VALUES(6,'";
const char * tail= "')";
[/Quote]

我发帖时故意去掉了。。。
我的结构体obj是
struct
{
int a;
char b; char c; char d; char e;
} obj = {1, 'b','c','d','e'};
语句是这样的“INSERT INTO blobtest VALUES(6,\001\\0\\0\\0bcde);”
iihero_ 2010-06-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 cd2108006026 的回复:]

check the manual that corresponds to your MySQL server version for the right syntax to use near '\0\0\0bcde)' at line 1
[/Quote]
什么意思,按照4楼的改一下,出现了这个错吗?
cd2108006026 2010-06-04
  • 打赏
  • 举报
回复
check the manual that corresponds to your MySQL server version for the right syntax to use near '\0\0\0bcde)' at line 1
ACMAIN_CHM 2010-06-04
  • 打赏
  • 举报
回复
INSERT INTO blobtest VALUES(6,'\001\\0\\0\\0bcde')

引号哪去了? 你的SQL语句生成的不对,

    const char * head= "INSERT INTO blobtest VALUES(6,'";
const char * tail= "')";
cd2108006026 2010-06-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 acmain_chm 的回复:]
错误提示是什么?
[/Quote]
就是说语句中有语法错误
我改了一下:
int len = mysql_real_escape_string(handle, sql+current_length, (char *)&obj, sizeof(obj));
current_length += len;

gdb调试发现sql语句是:

INSERT INTO blobtest VALUES(6,\001\\0\\0\\0bcde)
iihero_ 2010-06-03
  • 打赏
  • 举报
回复
同问。
ACMAIN_CHM 2010-06-03
  • 打赏
  • 举报
回复
错误提示是什么?

56,675

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧