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

PHP PDO更新查询未在select查询内更新,php,database,pdo,Php,Database,Pdo,所以,我试图制作一个脚本来收集YouTube频道数据。我希望能够通过点击按钮来更新数据。现在,当更新查询处于while循环中时,它不会遍历数据库中的用户并更新信息。当我这样做时,update查询后面的括号正好在while循环之后,它将更新数据库中的一条记录。我需要它能够在我的数据库中循环,并使用rank partner更新所有用户。是的,所有列和所有内容都是正确的,因为它在不在while循环中时会更新它,但只更新一个用户,而不是所有用户 $query = $db->prepare("SEL

所以,我试图制作一个脚本来收集YouTube频道数据。我希望能够通过点击按钮来更新数据。现在,当更新查询处于while循环中时,它不会遍历数据库中的用户并更新信息。当我这样做时,update查询后面的括号正好在while循环之后,它将更新数据库中的一条记录。我需要它能够在我的数据库中循环,并使用rank partner更新所有用户。是的,所有列和所有内容都是正确的,因为它在不在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
更改为anything(
$q
?),它将为所有用户执行您需要它执行的操作

我认为这可能有效,但现在出现了另一个问题。我得到了这个
致命错误:无法重新声明findviews()
,这是这一行
函数findviews($channel){
是的,将你的
函数findviews()
声明放在循环之外。否则你会试图重新定义它。将它粘贴到文件的顶部(在
while(…){/code>之前)你应该很好,你是一个向导吗?非常感谢,这完全奏效了,我一直在努力解决这个问题,大约一周了!你还在吗?我的登录还有一个问题。我想让两个级别都可以使用登录,但它会一直阻止这两个级别,但如果我只使用一个,它工作得很好。这是我的if语句
if($rank!=“Admin”|$rank!=“Staff”){$message=“您没有查看此页面的权限。”;}其他{
@charmeleonOK,这是一个逻辑问题。您想将
if
中的条件改为
&&
而不是
|
。在这样做之前,请想一想为什么;)是绑定所有字符串的值?在一段时间内定义一个函数?在循环外定义它,否则就是在定义该函数连续不断地。