0

我的狮身人面像中有以下内容

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

我在 sphinx 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 程序连接到 sphinx sql 没有问题

4

1 回答 1

1

一个问题可能是您引用了 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)") ) 
于 2013-07-29T21:38:54.407 回答