有char *sql;
char* sql2;
sql2 = "INSERT INTO appdata (name, time) VALUES ('new', 1)";
printf("%s,%d\n",sql,strlen(sql));
printf("%s,%d\n",sql2,strlen(sql2));
res = mysql_real_query(&mysql, sql, strlen(sql));
sql是一个用sprintf(sql, "INSERT INTO appdata (%s) VALUES (%s, %s)")创建出来的和sql2一模一样的字符串,sprintf打印的长度也相同,但是得到的输出结果却是INSERT INTO appdata (name, time) VALUES ('new', 1),50
INSERT INTO appdata (name, time) VALUES ('new', 1),50
Insert error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''neq' at line 1而把res = mysql_real_query(&mysql, sql, strlen(sql));的sql换成sql2,就能正常插入如果把new换成neww,也能正常插入,这是什么原因?可能和字符集有关系,但是字符集已经用
mysql_set_character_set(&mysql, "utf8")
设置过了,大惑不解…

解决方案 »

  1.   

    说你的sql在neq附近有语法错误  那你的sql肯定有neq三个字符
      

  2.   

    断点调试,检查一下实际的SQL语句是什么。
      

  3.   

    我都打印出来了,sql和sql2就是上面额打印结果啊,上面的neq,如果我把“new”改成neww2,这个neq也会发生改变,但是写成neww就能插入了,说明sql可能把 w和单引号'给解析成q什么的东西了,不知道怎么解析的
      

  4.   

    问题已解决,分配sql空间计算长度时漏了表名长度