2015-05-07 188 views
1

因此,我試圖製作一個腳本來收集YouTube頻道數據。我希望能夠通過點擊一個按鈕來更新數據。現在,它不會通過我的數據庫中的用戶並在更新查詢處於while循環時更新信息。當我這樣做時,更新查詢後的括號在while循環之後,它將更新數據庫中的一條記錄。我需要它能夠循環訪問我的數據庫並使用排名合作伙伴更新所有用戶。是的,所有的列和一切都是正確的,因爲它不會在while循環中更新它,而只是一個用戶而不是全部。PHP PDO更新查詢不在選擇查詢內更新

$query = $db->prepare("SELECT Username FROM Users WHERE Rank = 'Partner'"); 
$query->execute(); 
while ($row = $query->fetch(PDO::FETCH_ASSOC)){ 
    $channel = $row['Username']; 



function findviews($channel) { 

    error_reporting(E_ALL^E_NOTICE); 

    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 GTB5'); 
    curl_setopt($ch, CURLOPT_URL, 'http://socialblade.com/youtube/user/' . $channel); 

    $gdatapage = curl_exec($ch); 

    $gdatapage = strip_tags($gdatapage); 
    $getviews = explode("Views for the Last 30 Days:",$gdatapage); 
    $getviews = preg_replace("/\([^)]+\)/","",$getviews[1]); 
    $getviews = str_replace(",", "", trim($getviews)); 
    $getviews = explode(" S",$getviews); 
    $getviews = str_replace(" ", "", trim($getviews[0])); 

    curl_close($ch); 

    return $getviews; 

} 

$views = findviews($channel); 

    $ch = curl_init(); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 GTB5'); 
curl_setopt($ch, CURLOPT_URL, 'http://gdata.youtube.com/feeds/api/users/' . $channel); 

$gdatapage = curl_exec($ch); 

preg_match("/subscriberCount=\'([^\']*)\'/", $gdatapage, $subscribers); 

curl_close($ch); 
$subs = $subscribers[1]; 


$query = $db->prepare("UPDATE Users SET `Views` = :views, `Subs` = :subs WHERE `Username` = :channel"); 
$query->bindParam(':views', $views); 
$query->bindParam(':subs', $subs); 
$query->bindParam(':channel', $channel); 
$query->execute(); 

} 
+0

是你綁定所有字符串的值嗎? – EternalHour

+0

在一段時間內定義一個函數?定義循環外部,否則你正在不斷地定義該函數。 – Devon

回答

1

你重寫你的循環,當你寫的第一個用戶在$query

$query = $db->prepare("UPDATE Users SET `Views` = :views, `Subs` = :subs WHERE `Username` = :channel"); 
$query->bindParam(':views', $views); 
$query->bindParam(':subs', $subs); 
$query->bindParam(':channel', $channel); 
$query->execute(); 

變化$query在代碼中的任何東西(?$q)這一部分,它會做你需要它爲所有用戶做的事

+0

我認爲這可能有效,但現在又出現了另一個問題。我得到了這個'致命錯誤:無法重新聲明findviews()'這就是這行'函數findviews($ channel){' – CaPiTaLgam1ng

+0

是的,把你函數的findviews()聲明放在循環之外。否則,你正試圖重新定義它。將它粘貼到文件的頂部(在while(...){')之前,你應該沒問題 – charmeleon

+0

你是一個嚮導嗎?非常感謝你,這完全工作,我一直在試圖弄清楚這一個星期! – CaPiTaLgam1ng