2016-12-08 10 views
1

私は何時間も頭の中でこれを動作させようとしてきましたが、まだ運がないので私はここにきました。奇妙なPHP Whileループ

何らかの理由でコードのクエリーのコメントが解除されていると、ループが1回ループするだけで、データベースに3つのログがループします。

$sth = $dbh->prepare("SELECT * FROM `savedusers`"); 
$sth->execute(); 
while($row = $sth->fetch(PDO::FETCH_ASSOC)){ 
    $run++; 
    foreach($sites as $site){ 
    $clients = ${CalculateControllerVar($site['site_id'])}->list_clients($site['site_id']); 
    foreach($clients as $client){ 
     if(strtolower($client->mac) == strtolower($row['Mac'])){ 
     $aps = ${CalculateControllerVar($site['site_id'])}->list_aps($site['site_id'], $client->ap_mac); 
     $sth = $dbh->prepare("UPDATE `savedusers` SET `Location` = :loc WHERE `Mac` = :mac"); 
     $sth->execute(array(':loc' => $aps[0]->name, ':mac' => $row['Mac'])); 
     } 
    } 
    } 
} 

ありがとうございます。

+0

ループが1回だけであることをどのように判断しますか? – invisal

+0

ループの後に$ runをエコーし​​ます。 – Snazzy

答えて

2

これは、コメント付きコードで変数$sthを上書きしているためです。これらの行を次のように変更してください。

$sth2 = $dbh->prepare("UPDATE `savedusers` SET `Location` = :loc WHERE `Mac` = :mac"); 
$sth2->execute(array(':loc' => $aps[0]->name, ':mac' => $row['Mac'])); 

これは正しく動作します。

+0

オハイオ州私の神私はとても愚かです私はこれを見て何時間も費やしました。ありがとう。 – Snazzy