sonsuz döngü ile ilgili sorunlar

6 Cevap php
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.";
}

Bu fonksiyon ile sorun, bu yükler asla olmasıdır. Ben fark ettim, benim while döngüsü neden olur. I yorumda, her şey tamam. O benim db rastgele kullanıcı almak ve değişken $ yazara bunu ayarlamak zorundadır.

6 Cevap

Sorun sorgu döngü içinde olduğunu, bu nedenle her zaman (yani başından itibaren her zaman başlangıç) çalıştırmak alır. Sadece süre önce döngü sağ mysql_query () bölümü taşımak ve bir değişkende saklamak:

$query = mysql_query("SELECT * FROM users");
while($row=mysql_fetch_array($query))

You can replace this mega switch with one line:

$subid = rand(($catid * 8) - 7, min($catid * 8, 70));

Bir while döngü durumu her yineleme ile yürütülür ve değerlendirilir. Yani mysql_query true her yineleme ve retunrs ile denir.

Sadece bir kez veritabanı sorgu yürütmek ve sonucu önbelleğe:

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.";
}

Ben de sorun işlevleri (çabuk) anlamak için yol çok büyük olduğunu düşünüyorum. Sen onları daha küçük yapmak ve PHPUnit gibi bir birim test çerçevesi ile test edilmelidir.

Ben PHP kullanmayın zaman bir çok şey var fakat ben düşünüyorum atama

$row=mysql_fetch_array(mysql_query("SELECT * FROM users"))

Her zaman true, her tekrarında tekrar ve tekrar sorgualamayı döndürür gerekir ..

Eğer döngü çalıştırmak her zaman yeni bir sorgu başlıyoruz.