2013-07-29 102 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

你逃過了你的單引號嗎? –