当前位置: 首页 > 知识库问答 >
问题:

MySQL PDO空结果集时ATTR_EMULATE_PREPARES设置为false和查询被杀死

宣望
2023-03-14

当PDO::ATTR_EMULATE_PREPARES设置为false并且您的查询被终止时(例如MySQL Workbench-

结果,您的应用程序接收到空的结果集,尽管该查询应该返回一些数据。没有办法处理那种情况。当您对收到的PDO语句运行errorCode()时,会得到:“00000”,errorInfo()返回一个数组:

['00000', null, null]

我正在运行:MySQL 5.6.22,PHP 5.6.4,pdo_mysql-mysqlnd 5.0.11-dev-20120503

这导致我假设PDO或MySQL中都存在bug。

这里解释一下:PDO MySQL:TTR_EMULATE_PREPARES使用PDO::A?对于MySQL来说

是否不建议使用PDO仿真?

当我将应用程序保留为默认(启用)状态时,它可能会受到什么影响?

就我个人而言,我认为这是一个非常关键的问题,因为当问题发生时(查询执行失败等)。)你的应用程序认为没有数据,而实际上有一些数据。想象一下,你的应用程序没有触发提醒购买你女朋友的生日花?纯粹的邪恶。

注意事项

当查询在状态中中断时:

 "Copying to tmp table"

您将收到一条异常消息

 "SQLSTATE[70100]: <<Unknown error>>: 1317 Query execution was interrupted"

当终止该查询执行时,即使处于“发送数据”状态,也会得到完全相同的异常,但是PDO::ATTR_EMULATE_PREPARES必须为true。

共有1个答案

隗俊誉
2023-03-14

我也面临同样的问题。幸运的是,在我的例子中,我只需要检查数据是否存在,因此我的解决方法是围绕原始select查询包装一个count语句:

SELECT COUNT(*) FROM (<original query>);

在这种情况下,我将只在超时时收到一个空响应。

 类似资料:
  • 我正在制作一个php注册脚本,注册工作正常,所有内容都已成功输入数据库,激活电子邮件工作正常,但每当我使用mysqli查询来选择或更新信息时,它都不起作用。 例如,当我使用我知道数据库中存在的帐户登录时,它告诉我用户名不存在,当单击电子邮件中的激活链接时,查询无法以相同的方式更新数据库。 我相信这是一个非常简单的错误,我忽略了我的新手,但我找了几个小时后找不到合适的答案。我真的不确定问题出在哪里。

  • 问题内容: 创建保存的过程时,可以创建一些变量吗?例如: 问题:但是如何从查询中设置变量结果,即如何进行如下设置: ? 问题答案: 有多种方法可以做到这一点。 您可以使用子查询: (就像您的原始文章一样,只需在查询周围添加括号) 或使用SELECT INTO语法分配多个值: 子查询语法稍微快一些(我不知道为什么),但是只能分配一个值。select into语法允许您一次设置多个值,因此,如果需要从

  • 我试图使用Lucene索引进行查询,但得到的结果为空,日志中出现以下错误, 我正在使用RDB DocumentStore,我已经检查了索引和节点是在节点表中创建的。 任何人都可以分享一些关于如何创建Lucene索引的示例代码吗?

  • 问题内容: 我有一个查询。现在,此查询当然返回一个结果集,我想要的是查询此查询的结果集,例如,我只希望上述查询具有唯一的名称。我应该提一下,我知道我可以在Query1中使用,但这只是一个示例,我的实际情况有些不同,我想知道的是是否可以查询上一个查询的结果集。我正在使用SQL Server 2012。 问题答案: 您可以使用该子句

  • 我已经从NOAA下载了Weath.txt文件,看起来像: 然后我创建了下表: 现在,如果我尝试一个简单的查询,如下所示: 我会得到正确的结果,但列标题/名称为空!!! 为什么列名称/标题为空?!

  • 问题内容: 谁能指出如何检查选择查询是否返回非空结果集? 例如,我有下一个查询: 我应该像下一个那样做吗: 测试结果集是否不为空? 问题答案: 使用@@ ROWCOUNT: 根据SQL Server联机丛书: 返回受最后一条语句影响的行数。如果行数超过20亿,请使用ROWCOUNT_BIG。