这是为什么 Fatal Error

szp895 2012-02-01 09:42:49
我只要一加入以下代码 网页加载就很慢 然后就会出现这个错误提示: Fatal error: Maximum execution time of 30 seconds exceeded in E:\xampp\htdocs\business\lib\functions.php on line 13


$rand_invoice_id=rand(0000,9999);
$current_time=date("Y-m-d H:i:s");
$current_time_start=date("Y-m-d")." "."07:00:00";
$tomorrow_time_start=date("Y-m-d", strtotime('+1 day'))." "."07:00:00";
$yesterday_time_start=date("Y-m-d", strtotime('-1 day'))." "."07:00:00";
$row=1;
do
{
$query="SELECT * FROM CART WHERE (invoice_id='$rand_invoice_id') AND (order_time BETWEEN '$current_time_start' AND '$tomorrow_time_start')";

$result=queryMysql($query);
$rows=mysql_num_rows($result);
if($rows != 0)
{
$rand_invoice_id=rand(0000,9999);
}

}
while($row!=0);


我只是想弄一个购物车,随机生成invoice ID,但是随机生成的可能会重复,所以先随机生成一个,然后在数据库里一定时间范围内找,如果有一样的就重新随机再生成一个,知道没有重复为止。

我实在不知是哪有问题了,谢谢各位!替我看看吧
...全文
152 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
coosh 2012-02-09
  • 打赏
  • 举报
回复
果然眼尖,不应起这么接近的变量名。坏习惯啊

[Quote=引用 12 楼 xuzuning 的回复:]

$row=1;
do
{
......
$rows=mysql_num_rows($result);
.....
}
while($row!=0);

死循环!$row!=0 条件永远满足
[/Quote]
代码如诗 2012-02-09
  • 打赏
  • 举报
回复
一个小小的建议:
date("Y-m-d 07:00:00", strtotime('+1 day'));
LuciferStar 2012-02-09
  • 打赏
  • 举报
回复
把$row改成$rows后,最坏要查询数据库10000次。
xuzuning 2012-02-09
  • 打赏
  • 举报
回复
$row=1;
do
{
......
$rows=mysql_num_rows($result);
.....
}
while($row!=0);

死循环!$row!=0 条件永远满足
ci1699 2012-02-09
  • 打赏
  • 举报
回复
还查数据库呢 = =
生成不重复id。
可以用自动递增的id。或用当前时间加些判断。
coosh 2012-02-09
  • 打赏
  • 举报
回复
按照你这样的写法是接近死循环,因此执行超时,特别是你的数据越来越多的时候。

LZ你还是改变算法吧,8楼的做法简单又实用。


[Quote=引用 8 楼 kikiboy1987 的回复:]

你可以用数据库自增的ID字段或者写个ID生成器类或者直接拿时间戳当ID,无论哪个都是秒出不重复ID...
[/Quote]
Liv2005 2012-02-09
  • 打赏
  • 举报
回复
同LS各位的想法,循环中没有退出条件,不管你怎么设置maxtimeout,最终都会timeout崩溃掉

如果想生成不重复的id,可以考虑用uuid
select uuid();
kikiboy1987 2012-02-09
  • 打赏
  • 举报
回复
你可以用数据库自增的ID字段或者写个ID生成器类或者直接拿时间戳当ID,无论哪个都是秒出不重复ID...
一起混吧 2012-02-02
  • 打赏
  • 举报
回复
看你的代码肯定是出现死循环了。 代码一直在执行。
szp895 2012-02-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 phpnewnew 的回复:]

修改php.ini文件
max_execution_time = 0; //永不过期,默认为30

或 在文件前面添加
set_time_limit(0);
[/Quote]
如果我不想加set_time_limit(0); 怎么改代码能解决这个问题?
如果改了这个limit,那开网页速度岂不是会慢?
码无边 2012-02-02
  • 打赏
  • 举报
回复
内存不够。
natici 2012-02-02
  • 打赏
  • 举报
回复
$query="SELECT * FROM CART WHERE (invoice_id='$rand_invoice_id') AND (order_time BETWEEN '$current_time_start' AND '$tomorrow_time_start')";

$rand_invoice_id 是一个随机数,请确认搜索到结果的几率是多大?如果只有当$rand_invoice_id=0时才没有结果的话,循环可以理解为一直执行,简称死循环。
xiachao2008 2012-02-02
  • 打赏
  • 举报
回复
代码执行时间过长,超时了30秒(默认为30秒)
一起混吧 2012-02-01
  • 打赏
  • 举报
回复
程序执行过程过长。 set_time_limit(0)
黄袍披身 2012-02-01
  • 打赏
  • 举报
回复
修改php.ini文件
max_execution_time = 0; //永不过期,默认为30

或 在文件前面添加
set_time_limit(0);

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧