【问题标题】:Internet Explorer can't handle multiple queriesInternet Explorer 无法处理多个查询
【发布时间】:2011-12-13 18:32:33
【问题描述】:

这可能是也可能不是编程问题。

这是关于我问过earlier 的一个问题。您不需要了解之前的问题,但它可能是相关的。我不确定这是否是内存或设置,或者可能是 db(极不可能)问题。

$table_name 实际上是一个view,如果它有什么不同的话。数据库是MySQL。我有以下一段代码。为了保持一致性,我在最后添加了die()

$query = mysql_query("SELECT * FROM $table_name") or die(mysql_error());

$query1 = mysql_query("SELECT * FROM $table_name") or die(mysql_error());

$query2 = mysql_query("SELECT * FROM $table_name") or die(mysql_error());

$query3 = mysql_query("SELECT * FROM $table_name") or die(mysql_error());

$query4 = mysql_query("SELECT * FROM $table_name") or die(mysql_error());

echo "End";
die();

这个简单的 php 页面不能在 ie 中运行,但在 chrome 和 firefox 中运行良好。我收到"Internet Explorer cannot display the webpage" 错误。开发者的工具控制台没有错误。 view 有大约 50,000 条记录。

但是这段代码运行良好。另一个查询不应该有那么大的不同。

$query = mysql_query("SELECT * FROM $table_name") or die(mysql_error());

$query1 = mysql_query("SELECT * FROM $table_name") or die(mysql_error());

$query2 = mysql_query("SELECT * FROM $table_name") or die(mysql_error());

$query3 = mysql_query("SELECT * FROM $table_name") or die(mysql_error());
echo "End";
die();    

$query4 = mysql_query("SELECT * FROM $table_name") or die(mysql_error());

我想可能是需要处理大量记录(250k 很小)。所以我尝试了这段代码。每个查询大约有 15 条记录。

$query = mysql_query("SELECT * FROM $table_name WHERE col1 ='var'") or die(mysql_error());

$query1 = mysql_query("SELECT * FROM $table_name WHERE col1 ='var'") or die(mysql_error());

$query2 = mysql_query("SELECT * FROM $table_name WHERE col1 ='var'") or die(mysql_error());

$query3 = mysql_query("SELECT * FROM $table_name WHERE col1 ='var'") or die(mysql_error());

$query4 = mysql_query("SELECT * FROM $table_name WHERE col1 ='var'")or die(mysql_error());
echo "End";
die();

这个还没完。我得到同样的错误"Internet Explorer cannot display the webpage"。不过这很好用。

$query = mysql_query("SELECT * FROM $table_name WHERE col1 ='var'") or die(mysql_error());

$query1 = mysql_query("SELECT * FROM $table_name WHERE col1 ='var'") or die(mysql_error());

$query2 = mysql_query("SELECT * FROM $table_name WHERE col1 ='var'") or die(mysql_error());

$query3 = mysql_query("SELECT * FROM $table_name WHERE col1 ='var'") or die(mysql_error());
echo "End";
die();

$query4 = mysql_query("SELECT * FROM $table_name WHERE col1 ='var'") or die(mysql_error());

我对 Internet Explorer 无法处理 5 个简单查询感到非常困惑。有的时候连$query3都过不去,$query2也过不去。

我已经在本地测试过 - Win7、IE8。我有足够的内存、硬盘空间等。我在本地运行 PHP 5.3.5。

我还在两台运行 IE8 的不同计算机上的基于 unix 的服务器上对此进行了测试。再次有足够的内存,硬盘空间等。在服务器上,PHP版本是5.25。

我确实在一张较小的桌子上进行了测试,效果很好。该表有 200 条我随机生成的记录。但是在更大的table(read view) 上它不起作用。

在这一点上,我对 IE 感到非常沮丧。如果 IE 有任何限制或任何修复它的方法,任何见解/帮助解释为什么它不起作用将不胜感激。

【问题讨论】:

  • 不确定问题出在哪里(它可能与 IE 无关,因为您的代码在服务器端运行)但总的来说 - 您没有在查询中进行任何错误检查。在mysql_query() 通话后,您需要执行此操作。否则,如果其中一个查询失败,您的脚本将中断且没有错误消息。 manual on mysql_query()reference question. 中概述了如何执行此操作
  • 我没有在这里添加错误检查。但是我在服务器上的实际代码中检查错误。我可以添加它,它不会有任何影响。代码已更新。
  • 尝试将内容类型设置为text/plain。您应该更好地了解出了什么问题。
  • 我做了,仍然得到同样的错误。我在这里用text/plain 寻找什么?

标签: php mysql internet-explorer


【解决方案1】:

这在 IE 上不是问题。 IE 无法显示网页,因为服务器没有(正确)返回结果。禁用 IE 中的“友好消息”,您可以(可能)获得更好的消息,甚至可能是关于问题所在的一些提示。 您还可以将所有内容包含在 try-catch 中并打印结果,这也可能会有所帮助。 http://php.net/manual/en/language.exceptions.php

【讨论】:

  • 我确实在 try catch 块中添加了它,但我仍然没有收到任何错误消息。只是Internet Explorer cannot display the webpage..
  • 我会尝试的事情: 1. 注释第一个查询并保留第五个(应该与没有第五个但有第一个时相同) 2. 输入表名,而不是变量 3. 指定单个列 4. 检查同时打开的数据库连接数(无论是在服务器中还是在 PHP 中)的任何限制,希望这会有所帮助...
  • 1) 试过了,就是这样。 2) 没有区别。 3)即使是单列,即SELECT col1 from ..,它也无法读取所有这些。 4) 可能同时打开的连接数为 250。目前只有 30 个。
  • 5.在调用之间打印一些东西,只是为了确保它以这种方式进行(确保不被缓冲) 6. 使用 wget 检索 URL,这样我就可以准确地看到服务器返回的内容。您有权访问服务器日志吗?你的服务器是windows还是linux?
  • 我刚刚阅读了您的其他帖子。我猜你不是直接调用这个脚本,只是通过ajax,对吧?如果是这样,您应该尝试直接访问它,以仅隔离所有涉及的有问题的部分。
【解决方案2】:

为了搞清楚,PHP 在服务器上运行。 IE 和 Firefox 是浏览器,不执行任何 PHP(这是运行查询的内容)。

您运行的 PHP 脚本可能在 IE 上超时。简而言之,渲染需要很长时间,IE 认为它已损坏(大多数用户也是如此)。

考虑使用 AJAX 调用。

【讨论】:

  • 我正在使用 ajax 调用。如果您阅读了上一个问题,那就是错误的来源。我正在尝试在这里调试。
【解决方案3】:

在执行所有 5 个查询时,您可能会达到最大执行时间,
并且您的脚本没有返回正确的 HTTP 状态
(可能是错误 500,您需要根据您的 apache 日志进行验证)

但是,最致命的问题是因为您将同一组 SQL 重复了 5 次。
所有查询都返回相同的结果集,您可以简单地将所有 5 个查询合并为一个。

合并查询后,请对从视图中执行查询所需的时间进行基准测试,
不知道what exactly you have written for the view,不敢说是安全的。

【讨论】:

  • 如果我在 mysql 中执行,运行查询只需不到一秒的时间。 IE 在大约 5-10 秒内超时。
  • 你知道视图的结果被缓存了吗?但是,如果有更新,缓存将失效,mysql 必须重新计算。你想包括你对 mysql 结果的迭代吗? (也许你在某处包含了一个无限循环)
  • 很可能它被缓存了,因为我从昨天起没有更新/删除/插入任何东西。不要有任何无限循环。这只是用这个 sn-p 测试代码。我确实尝试打印结果,但如果我这样做了,它不会超过 2-3 个查询,所以不确定这是否是内存问题。
  • 你应该真正开始组合相同的查询,并测试增益。
【解决方案4】:

实际的问题是您的页面加载时间过长(由于查询量大),如果等待时间超过 1 分钟,IE 将超时。

To fix you will need to edit the registry 但这不是必需的,因为任何页面的加载时间都不应超过 1 分钟!

【讨论】:

  • 不到 10 秒就会超时。它甚至不超过30秒。我很确定默认值超过 30 秒。
猜你喜欢
  • 1970-01-01
  • 2011-09-12
  • 2010-10-29
  • 1970-01-01
  • 2011-03-15
  • 1970-01-01
  • 2010-10-04
  • 1970-01-01
相关资源
最近更新 更多