Sphinx - Количество столбцов не соответствует

У меня в моем сфинксе есть следующее

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

И я успешно выполнил следующую операцию в сфинксе 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-серверу sphinx без проблем.

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)") )

licensed under cc by-sa 3.0 with attribution.