首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无限循环的问题

无限循环的问题
EN

Stack Overflow用户
提问于 2010-05-31 06:15:28
回答 6查看 532关注 0票数 0
代码语言:javascript
复制
function addAds($n) {
 for ($i=0;$i<=$n;$i++) {
  while($row=mysql_fetch_array(mysql_query("SELECT * FROM users"))) {
   $aut[]=$row['name'];
  }
  $author=$aut[rand(0,mysql_num_rows(mysql_query("SELECT * FROM users")))];
  $name="pavadinimas".rand(0,3600);
  $rnd=rand(0,1);
  if($rnd==0) {
   $type="siulo";
  } else {
   $type="iesko";
  }
  $text="tekstas".md5("tekstas".rand(0,8000));
  $time=time()-rand(3600,86400);
  $catid=rand(1,9);
  switch ($catid) {
   case 1:
    $subid=rand(1,8);
    break;
   case 2:
    $subid=rand(9,16);
    break;
   case 3:
    $subid=rand(17,24);
    break;
   case 4:
    $subid=rand(25,32);
    break;
   case 5:
    $subid=rand(33,41);
    break;
   case 6:
    $subid=rand(42,49);
    break;
   case 7:
    $subid=rand(50,56);
    break;
   case 8:
    $subid=rand(57,64);
    break;
   case 9:
    $subid=rand(65,70);
    break;
  }
  mysql_query("INSERT INTO advert(author,name,type,text,time,catid,subid) VALUES('$author','$name','$type','$text','$time','$catid','$subid')") or die(mysql_error());
 }
 echo "$n adverts successfully added.";
}

这个函数的问题是它永远不会加载。正如我注意到的,我的while循环导致了它。如果我评论它,一切都是好的。它必须从我的数据库中获取随机用户,并将其设置为变量$author。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-05-31 06:17:42

问题是查询在循环中,所以每次都会运行(所以每次都从头开始)。只需将mysql_query()部分移到while循环之前,并将其存储在一个变量中:

代码语言:javascript
复制
$query = mysql_query("SELECT * FROM users");
while($row=mysql_fetch_array($query))
票数 6
EN

Stack Overflow用户

发布于 2010-05-31 06:22:27

你可以用一行代码替换这个巨大的开关:

代码语言:javascript
复制
$subid = rand(($catid * 8) - 7, min($catid * 8, 70));
票数 4
EN

Stack Overflow用户

发布于 2010-05-31 06:18:17

每次迭代都会执行并评估while循环的条件。因此,每次迭代都会调用mysql_query,并返回true。

只需执行一次数据库查询并缓存结果:

代码语言:javascript
复制
function addAds($n) {
    $result = mysql_query("SELECT * FROM users");
    $aut = array();
    while ($row = mysql_fetch_array($result)) {
        $aut[]=$row['name'];
    }
    $rowCount = count($aut);
    for ($i=0; $i<=$n; $i++) {
        $author=$aut[rand(0,$rowCount)];
        // …
        mysql_query("INSERT INTO advert(author,name,type,text,time,catid,subid) VALUES('$author','$name','$type','$text','$time','$catid','$subid')") or die(mysql_error());
    }
    echo "$n adverts successfully added.";
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2940538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档