PHP PDO 更新查询未在 select 查询中更新

PHP PDO Update query not updating inside select query

所以,我正在尝试制作一个脚本来收集 YouTube 频道数据。我希望能够通过单击按钮来更新数据。现在,当更新查询处于 while 循环时,它不会遍历我数据库中的用户并更新信息。当我这样做时,更新查询后最后的括号就在 while 循环之后,它将更新数据库中的一条记录。我需要它能够遍历我的数据库并使用排名合作伙伴更新所有用户。是的,所有列和所有内容都是正确的,因为它确实在不在 while 循环中时更新它,但只是一个用户而不是所有用户。

$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();

}

您正在覆盖 $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?),它将为所有用户执行您需要它执行的操作