2016-11-20 7 views
1

私はウェブサイト上で作業していますが、この変更をコメントアウトしようとしていますが、最近UPDATEクエリが機能していません。最後の3時間は役に立たない。MySQL UPDATEクエリ(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は "非常にまれな"機会にコロンをどこで使用する必要があるかを見てきましたが、いくつかのサーバー構成に依存します。 –

関連する問題