首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MultiStatements中哪一个“不同步”?

MultiStatements中哪一个“不同步”?
EN

Database Administration用户
提问于 2017-01-10 20:29:52
回答 2查看 484关注 0票数 0

如何找出哪一条语句不同步,当我得到错误2014年与多个语句?

我使用与libmysql.mysql_query的SQL连接调用SupportsMultiStatements,传递由;分隔的一系列命令。此代码整天运行,没有错误。但是,每隔几天(没有规律),我的应用程序就会抛出:

2014年-命令不同步;您现在不能运行此命令。

重试总是有效的。

错误消息没有指定多个命令中哪一个“不同步”。有什么办法知道吗?

这个问题不是如何解决我的具体问题,所以我还没有列出命令列表。(我怀疑间歇性问题是由等待表锁的超时引起的。)这个问题是关于2014年错误如何适用于多个语句的问题。

EN

回答 2

Database Administration用户

回答已采纳

发布于 2017-01-11 03:14:13

通常指的是使用PREPARE + EXECUTE + DEALLOCATE_PREPARE存储的例程。你按顺序把这三个都做好了吗?可选地,可以重复EXECUTE

如果您指的是将语句与;串在一起,请不要这样做;这是一个等待黑客进入的安全漏洞。

您使用的是什么客户端语言?

如果您需要更多的帮助,让我们看看您的代码。

票数 1
EN

Database Administration用户

发布于 2017-01-23 19:03:46

答案是你不能,所以不要那样做。此外,正如Rick指出的,多语句SQL是一个安全漏洞,允许黑客终止您的SQL并执行自己的SQL。

在我的例子中,我解决了眼前的问题,让我的异常对话框显示导致错误的整个多语句SQL,格式化为在对话框中可读。结果表明,在某些条件下(备份锁定表),语句不按预期顺序排列。

我正在使用多语句“批处理”我的命令到一个MyIsam表。我计划在“;”上拆分字符串,并分别执行每个cmd,并禁用连接上的多个语句。然后我意识到那仍然会留下同样的安全漏洞。我的代码或连接器是否实现多语句并不重要。

因此,我现在的计划是将每个cmd存储在一个TStringList中,然后在进程完成时按顺序提交它们。如果其中一个cmds被黑客攻击为包含“;new”,则连接将引发异常。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/160619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档