我只要一加入以下代码 网页加载就很慢 然后就会出现这个错误提示: 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,但是随机生成的可能会重复,所以先随机生成一个,然后在数据库里一定时间范围内找,如果有一样的就重新随机再生成一个,知道没有重复为止。我实在不知是哪有问题了,谢谢各位!替我看看吧

解决方案 »

  1.   

    修改php.ini文件
    max_execution_time = 0; //永不过期,默认为30或 在文件前面添加
    set_time_limit(0);
      

  2.   

    程序执行过程过长。 set_time_limit(0)
      

  3.   

    如果我不想加set_time_limit(0);  怎么改代码能解决这个问题?
    如果改了这个limit,那开网页速度岂不是会慢?
      

  4.   

    $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时才没有结果的话,循环可以理解为一直执行,简称死循环。
      

  5.   

    你可以用数据库自增的ID字段或者写个ID生成器类或者直接拿时间戳当ID,无论哪个都是秒出不重复ID...
      

  6.   

    同LS各位的想法,循环中没有退出条件,不管你怎么设置maxtimeout,最终都会timeout崩溃掉如果想生成不重复的id,可以考虑用uuid
    select uuid();
      

  7.   

    还查数据库呢 = =
    生成不重复id。
    可以用自动递增的id。或用当前时间加些判断。
      

  8.   

    $row=1;
    do
    {
      ......
      $rows=mysql_num_rows($result);
      .....
    }
    while($row!=0);死循环!$row!=0 条件永远满足
      

  9.   

    把$row改成$rows后,最坏要查询数据库10000次。
      

  10.   

    一个小小的建议:
    date("Y-m-d 07:00:00", strtotime('+1 day'));