SQL 语句超过 PHP 中的最长时间,但在 phpMyAdmin 中立即运行

Posted

技术标签:

【中文标题】SQL 语句超过 PHP 中的最长时间,但在 phpMyAdmin 中立即运行【英文标题】:SQL statement exceeds maximum time in PHP but runs immediately in phpMyAdmin 【发布时间】:2015-01-20 12:19:44 【问题描述】:

我正在开发一个电子商务页面。我编写了一段代码,根据它们所在的购物车从我的数据库中获取产品列表。有三个表,一个用于购物车,一个用于每个购物车中的项目,一个列出每个购物车的详细信息产品。会话 ID 存储在列出购物车的表中。

我在一个 php 文件的一部分中编写了以下代码:

$sessionId = session_id();
$selStr = "SELECT cart_items.quantity, products.price, products.discount 
           FROM cart_items JOIN carts ON carts.id = cart_items.carts_id
           JOIN products ON cart_items.products_id = products.id
           WHERE session_id='".$sessionId."';";

$result = mysql_query($selStr);

当我在浏览器中获取此页面时,服务器上的请求超时并返回错误:

Fatal error: Maximum execution time of 30 seconds exceeded

我使用 phpMyAdmin 运行了这个 SQL 语句,代码运行良好。事实上,它会立即返回。此外,如果我分解 SQL 语句并一次从表中检索信息,并分别调用 MySQL,则不会发生超时。我正在编写此 SQL 代码以消除文件中多余的代码量。

只有在 PHP 代码中调用 MySQL 数据库需要更长的时间,有什么原因吗?

编辑:为了澄清这个问题,我的意思是问为什么 MySQL 调用没有立即在我的 php 代码中返回?有什么东西阻止它返回吗?可能是安全问题?

【问题讨论】:

通话时间不会更长。在 php.ini 文件中,max_execution_time 必须设置为 30 秒。请使用 echo phpinfo() 检查值;如果真的是 30 秒,那就增加它。 调用肯定需要更长的时间。它立即在 phpMyAdmin 页面中返回,但通过我的网站调用超过了 30 秒的限制。 你必须改变 max_execution_time。这是在 php.ini 文件中..这个问题不需要重新创建。它与 [link](***.com/questions/1263680/…) 相同 它与 max_execution_time 无关,增加它不是解决方案,因为即使在 30 秒内提供请求本身也是不可接受的! 会话 id 没问题。当我将它放入 phpMyAdmin 时,我给了它一个回显到网页的值。所以他们都得到了相同的完全形成的 SQL 字符串。 【参考方案1】:

我自己想通了。

上面列出的代码运行良好,但是在预期的输出中有一个奇怪的扭结。基本上,我没有调用从数据库中获取结果集中的下一行,因此我爱上了书中最古老的技巧,即无限循环。

在调用数据库以获取 $result (在我在问题中发布的代码中)之后,我有一条回显线,这让我大吃一惊。我期待这条线出现。不幸的是,它在浏览器中从页面输出了该行,所以我被骗以为没有到达 mysql_query 调用之后的 echo 行。

叹息。感谢任何试图提供帮助的人。非常感谢。

【讨论】:

以上是关于SQL 语句超过 PHP 中的最长时间,但在 phpMyAdmin 中立即运行的主要内容,如果未能解决你的问题,请参考以下文章

使用超过 255 个 UNION ALL 语句修复 SQL

在 SQL 中有效但在 PHP 中无效的查询

ORA-00900:PHP中无效的SQL语句,但在sqlplus中有效

请教MYSQL insert语句的长度限制 MYSQL语句最长可以多长

性能测试四十一:慢sql和执行计划一

mysql慢查询和php-fpm慢日志