2016-11-20 57 views
1

我一直在一个网站上工作,并最近添加了一些更改,尽管试图评论说所做的更改,我的更新查询不工作 - 我一直在试图找出原因在过去的3个小时无济于事。MySQL更新查询(PDO)莫名其妙地不工作

if (isset($_POST['submit'])) 
{ 
    if (count($rated)<$_SESSION['id']) 
    { 
     $difference = $_SESSION['id'] - count($rated); 

     $rated = implode(',',$rated); 
     while ($difference >= 0) 
     { 
      $rated .= "0,"; 
      $difference--; 
     } 
     $rated = explode(',',$rated); 
    } 

    $rated[$_SESSION['id']] = $_POST['rating']; 

    $ratings = 0; 
    $ratingsadded = 0; 
    foreach ($rated as $user => $rating) 
    { 
     if ($rating != 0) 
     { 
      $query = $db->prepare("SELECT id, active FROM accounts WHERE id = :id"); 
      $query->execute(array('id' => $user)); 
      $useractive = $query->fetch(); 

      if ($useractive['active'] == 1 || $user == 0 || $user == 50) 
      { 
       $ratings++; 
       $ratingsadded += $rating; 
      } 
      else 
      { 
       $rated[$user] = 0; 
      } 
     } 
    } 
    $ratingtotal = $ratingsadded/$ratings; 

    $query = $db->prepare("UPDATE accounts SET rating = :rating, rated = :rated WHERE id = :id"); 
    $query->execute(array('rating' => $ratingtotal, 'rated' => implode(",",$rated), 'id' => $user['id'])); 
    header('Location: ?user=' . $_GET['user']); 
} 

注:最后的查询是我所指的那个。

备注:我知道在我的代码中有很多低效率。

全码:http://pastebin.com/ybb71U6k

+0

看起来好像这会起作用,我的笔记本电脑刚刚崩溃,所以我现在重新启动它,以便我可以测试。 – qwerty77asdf

+1

我删除了我的评论。我可以看到你在'foreach'循环中使用了'$ user'作为数组索引,所以它不是execute语句的问题。 –

+0

@Rajdeep参考我的答案,非常感谢。 – qwerty77asdf

回答

0

虽然Rajdeep删除了他的答案,我打算与以下回应:

非常感谢你,而你的答案是一点点熄灭,指出我had-问题我使用$ user作为foreach键值和查询结果。

我发现了这个问题,它是一个简单的愚蠢的情况下,并在其他变量之上分配变量。

我很抱歉让你们所有人都试图帮助我解决这个问题。

+1

是的,这就是我上面所说的。很高兴你的问题得到解决。 :-) –

0

,我认为你应该写你执行这样

$query->execute(array(':rating' => $ratingtotal, ':rated' => implode(",",$rated), ':id' => $user['id'])); 

注:在每一个命名参数的前面。
参考:http://php.net/manual/en/pdo.prepare.php

+1

不需要,命名参数前面的':'不是必需的,它是可选的。看到这个SO回答,[http://stackoverflow.com/a/17386503/5517143](http://stackoverflow.com/a/17386503/5517143) –

+0

谢谢你的答案,但是,我一直写这样的查询他们一直在努力。 – qwerty77asdf

+0

@RajdeepPaul在“非常少见”的场合,我看到了冒号在哪里使用,并且取决于某些服务器配置。 –

相关问题