2016-11-20 2 views
1

Я работаю над веб-сайтом и недавно добавил к нему некоторые изменения, несмотря на попытки прокомментировать указанные изменения, мой запрос UPDATE не работает - я пытался выяснить, почему за последние 3 часа безрезультатно.MySQL UPDATE query (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

Я удалил свой комментарий. Я вижу, что вы использовали '$ user' в качестве индексов массива в цикле foreach, поэтому это не проблема с оператором 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 в «очень редком» случае я видел, где нужно использовать двоеточие и будет зависеть от некоторой конфигурации сервера. –

Смежные вопросы