2013-07-29 52 views
0

我在狮身人面像斯芬克斯 - 列数不匹配

mysql> desc rec; 
+-----------+---------+ 
| Field  | Type | 
+-----------+---------+ 
| id  | integer | 
| desc  | field | 
| tid  | uint | 
| gid  | uint | 
| no  | uint | 
+-----------+---------+ 

下面,我跑了在狮身人面像SQL

replace into rec VALUES ('24','test test',1,1, 1); 

成功地追踪但当我C编写的MySQL API中运行我得到这个错误

Column count doesn't match value count at row 1 

C代码是这样的

if (mysql_query(con, "replace into rec VALUES ('24','test test',1,1, 1)")) 
    { 
     fprintf(stderr, "%s\n", mysql_error(con)); 
     mysql_close(con); 
     exit(1); 
    } 

请注意,在C程序连接到SQL狮身人面像没有问题

+0

它是转义字符的问题吗? - 你必须逃避吗? –

+0

你运行的是哪个版本的MySQL?我从来没有听说过,也没有找到“字段”或“uint”列类型的文档。你能发布“show create table rec”的结果吗? – seanmk

+0

这是狮身人面像的SQL和不是MySQL的一个,我用C MySQL的API API插入它 – user2628572

回答

0

的一个问题是,你是引用ID列的整数。我会尝试删除24个单引号。名为desc的列也是有关的,因为这是MySQL中的一个保留字。

一个好的最佳实践是始终指定列名称,即使您插入到所有列中。原因是你可能想稍后改变表格来添加一列,你不一定想回去修改所有的代码来匹配新的结构。它也使得你的代码更清晰,因为你不必引用表结构来知道这些值的含义,并且它有助于防止像Sphinx这样的工具对列使用不同的顺序。尝试改变你的代码到这个,它指定列和引号(mysql使用反引号引号),并且还删除了id列的值附近的引号:

if (mysql_query(con, "replace into rec (`id`, `desc`, `tid`, `gid`, `no`) VALUES (24, 'test test', 1, 1, 1)")) 
+0

我试过了,它没有工作 – user2628572

+0

,我也试过没有引号 – user2628572

+0

你逃过了你的单引号吗? –