0
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に設定する必要があります。

4

6 に答える 6

6

問題は、クエリがループ内にあるため、毎回実行されることです(つまり、毎回最初から開始します)。mysql_query()部分をwhileループの直前に移動し、変数に格納するだけです。

$query = mysql_query("SELECT * FROM users");
while($row=mysql_fetch_array($query))
于 2010-05-30T22:17:41.607 に答える
4

このメガスイッチを1つのラインに置き換えることができます。

$subid = rand(($catid * 8) - 7, min($catid * 8, 70));
于 2010-05-30T22:22:27.190 に答える
2

ループの条件は、while反復ごとに実行および評価されます。したがってmysql_query、すべての反復で呼び出され、リチューナーはtrueになります。

データベースクエリを1回実行し、結果をキャッシュするだけです。

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.";
}
于 2010-05-30T22:18:17.273 に答える
2

また、問題は、関数が大きすぎて(すばやく)理解できないことだと思います。それらを小さくして、phpunitのようなユニットテストフレームワークでテストする必要があります。

于 2010-05-30T22:24:25.710 に答える
1

PHPを使わないのは久しぶりですが、課題だと思います

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

常にを返す必要がtrueあり、反復ごとにクエリを繰り返し実行します。

于 2010-05-30T22:18:32.690 に答える
0

ループを実行するたびに、新しいクエリを開始します。

于 2010-05-30T22:17:46.513 に答える