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。
发布于 2010-05-31 06:17:42
问题是查询在循环中,所以每次都会运行(所以每次都从头开始)。只需将mysql_query()部分移到while循环之前,并将其存储在一个变量中:
$query = mysql_query("SELECT * FROM users");
while($row=mysql_fetch_array($query))发布于 2010-05-31 06:22:27
你可以用一行代码替换这个巨大的开关:
$subid = rand(($catid * 8) - 7, min($catid * 8, 70));发布于 2010-05-31 06:18:17
每次迭代都会执行并评估while循环的条件。因此,每次迭代都会调用mysql_query,并返回true。
只需执行一次数据库查询并缓存结果:
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.";
}https://stackoverflow.com/questions/2940538
复制相似问题