C语言操作MySQL出现“Commands out of sync”错误:如何解决并发问题?

C语言操作MySQL出现“Commands out of sync”错误:如何解决并发问题?

c语言操作mysql遇到“[2014]: commands out of sync; you can’t run this command now”问题

问题详情:

c语言操作mysql时,遇到了如题所述的错误。该错误导致后续的所有sql命令都无法执行。问题可以通过快速执行多次前端操作来触发。

错误日志示例:

立即学习C语言免费学习笔记(深入)”;

23-05-05 11:30:20 | info | mysqlquery.success | sql: select * from tb_video where id='0105a290'; 23-05-05 11:30:20 | error | video selectone | mysql store result failed | err[0]: 23-05-05 11:30:20 | error | mysqlquery.err | sql: select * from tb_video where id='6d1db3db'; 23-05-05 11:30:27 | error | mysqlquery.err | err[2014]: commands out of sync; you can't run this command now

解决方法:

从日志上看,问题出现在 updatevideoview 函数中,在执行 select 语句后又进行了 update 操作。这导致了并发问题,使得后续的 select 语句无法正常执行。

为了解决该问题,需要在 updatevideoview 函数中添加如下锁:

void UpdateVideoView(std::string id) {   std::lock_guard<std::mutex> lock(_mutex);   MysqlQuery query;   if (!query.Query("UPDATE tb_views SET view=view+1 WHERE id='%s'", id.c_str())) {     return;   } }

通过添加锁,可以确保在执行 update 语句之前,没有其他线程正在执行 select 语句,从而避免了并发问题。

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享