Всегда проверяйте возвращаемое значение вызова API.
mysql_real_query()
возвращает целое число. Значение равно нулю, если вызов сработал, и отлично от нуля, если есть ошибка.
Проверьте возвращаемое значение и сообщите, если оно ненулевое:
if ((err = mysql_real_query(&mysql,"insert into scan (rfidnum) values ('2nd query')",
(unsigned int)strlen("insert into scan (rfid) values ('2nd query')"))) != 0)
{
// report err here, get additional information from these two API calls:
errno = mysql_errno(&mysql);
errmsg = mysql_error(&mysql);
}
обновление: Если вы получили ненулевой результат, вам нужно проверить mysql_error()
, чтобы узнать, какая ошибка. Поскольку вы сказали, что получаете ошибку, если второй запрос - SELECT
, я бы предположил, что это CR_COMMANDS_OUT_OF_SYNC
, что означает, что API считает, что ожидаются некоторые результаты (даже если результат состоит из нулевых строк). Вы не можете запустить следующий запрос SQL, пока не закончите извлекать результаты SELECT
(или вызывать хранимую процедуру), даже если результат этого запроса пуст.
Вот краткое объяснение в документации MySQL: « Команды не синхронизированы »
Вам нужно использовать mysql_free_result()
, прежде чем вы сможете выполнить другой запрос. А это значит, что вам нужно использовать mysql_use_result()
, прежде чем вы сможете освободить его.
Вот выдержка из mysql_use_result()
doc:
После вызова mysql_query () или
mysql_real_query (), вы должны вызвать
mysql_store_result () или
mysql_use_result () для каждого оператора
который успешно дает результат
установить (SELECT, SHOW, DESCRIBE, EXPLAIN,
ПРОВЕРИТЬ ТАБЛИЦУ и т. Д.). Вы должны
также вызвать mysql_free_result () после
Вы закончили с набором результатов.