如何找出哪一条语句不同步,当我得到错误2014年与多个语句?
我使用与libmysql.mysql_query的SQL连接调用SupportsMultiStatements,传递由;分隔的一系列命令。此代码整天运行,没有错误。但是,每隔几天(没有规律),我的应用程序就会抛出:
2014年-命令不同步;您现在不能运行此命令。
重试总是有效的。
错误消息没有指定多个命令中哪一个“不同步”。有什么办法知道吗?
这个问题不是如何解决我的具体问题,所以我还没有列出命令列表。(我怀疑间歇性问题是由等待表锁的超时引起的。)这个问题是关于2014年错误如何适用于多个语句的问题。
发布于 2017-01-11 03:14:13
通常指的是使用PREPARE + EXECUTE + DEALLOCATE_PREPARE存储的例程。你按顺序把这三个都做好了吗?可选地,可以重复EXECUTE。
如果您指的是将语句与;串在一起,请不要这样做;这是一个等待黑客进入的安全漏洞。
您使用的是什么客户端语言?
如果您需要更多的帮助,让我们看看您的代码。
发布于 2017-01-23 19:03:46
答案是你不能,所以不要那样做。此外,正如Rick指出的,多语句SQL是一个安全漏洞,允许黑客终止您的SQL并执行自己的SQL。
在我的例子中,我解决了眼前的问题,让我的异常对话框显示导致错误的整个多语句SQL,格式化为在对话框中可读。结果表明,在某些条件下(备份锁定表),语句不按预期顺序排列。
我正在使用多语句“批处理”我的命令到一个MyIsam表。我计划在“;”上拆分字符串,并分别执行每个cmd,并禁用连接上的多个语句。然后我意识到那仍然会留下同样的安全漏洞。我的代码或连接器是否实现多语句并不重要。
因此,我现在的计划是将每个cmd存储在一个TStringList中,然后在进程完成时按顺序提交它们。如果其中一个cmds被黑客攻击为包含“;new”,则连接将引发异常。
https://dba.stackexchange.com/questions/160619
复制相似问题