2016-04-12 16 views
-1

私は、SLIMと共にAngularを使用して、チームとプレーヤーに関する情報を含むREST APIを開発しています。私のPOST、GET、DELETEは正常に動作していますが、プレイヤーのテーブルに投稿しようとするとエラーが発生します。エラーメッセージは次のとおりです。更新クエリを使用するとエラーが発生する

無効なパラメータ番号:バインド変数の数は、私はすべての私のバインド変数を見ていると、問題がどこにあるか私が見ることができない

と一致していません。以下の関連コードをいくつか示したので、うまくいけば誰かが私を助けることができます。

HTML

<div ng-show="editorEnabled"> 
           <p>Name 
            <input ng-model="player.player_name"> 
           </p> 
           <p>DOB 
            <input ng-model="player.player_dob"> 
           </p> 
           <p>Nationality 
            <input ng-model="player.player_nationality"> 
           </p> 
           <p>Position 
            <input ng-model="player.player_position"> 
           </p> 
           <p>Club 
            <input ng-model="player.club_name"> 
           </p> 
           <a href="#" ng-click="editorEnabled=!editorEnabled; updatePlayer(player)">Save <span class="fa fa-save"></span></a> 
          </div> 

JS /アンギュラコントローラ

$scope.updatePlayer = function (player) { 

    $scope.player = player; 
    var id = $scope.player.id; 
    console.log($scope.player); 

    $http({ 
     method: 'PUT', 
     url: 'players.php/players/' + id, 
     data: $scope.player, 
     headers: { 
      'Content-Type': 'application/x-www-form-urlencoded' 
     } 
    }); 

}; 

この時点で、コンソールは、情報が正しくかつ期待通りの上に送信されたことを示しています。エラーメッセージが示すように、ステートメントにバインドされた変数の数は、実際に更新クエリで使用される変数の数と一致しません

PHP

 function updatePlayer($id){ 
    $request = Slim::getInstance()->request(); 
    $body = $request->getBody(); 
    $player= json_decode($body); 
    $sql = "Update players SET player_name=:player_name, player_position=:player_position, player_nationality=:player_nationality, player_dob=:player_dob WHERE id=:id"; 
try{ 
    $db = getConnection(); 
    $stmt =$db->prepare($sql); 
    $stmt->bindParam("player_name", $player->player_name); 
    $stmt->bindParam("player_position", $player->player_position); 
    $stmt->bindParam("player_nationality", $player->player_nationality); 
    $stmt->bindParam("player_dob", $player->player_dob); 
    $stmt->bindParam("club_name", $player->club_name); 
    $stmt->bindParam("id", $id); 
    $stmt->execute(); 
    $db = null; 
    responseJson(json_encode($player),200);  
}catch(PDOException $e){ 
    responseJson('{"error":{"text":'.$e->getMessage().'}}', 500); 

} 
} 
+2

あなたは更新クエリでそれを使用することなく 'club_name'をバインドしています。エラーメッセージがあなたに非常に潜在的にあなたに伝えようとしていることは何ですか。 – bspellmeyer

+0

あなたは可読性を高めることに焦点を当てて、もっと簡単にデバッグできるようにする必要があります.... – KDOT

答えて

2

club_nameパラメータが使用されることはありませんUPDATEクエリで。ただ、

$stmt->bindParam("club_name", $player->club_name);

を削除するか、またはクエリにclub_nameを追加すると、あなたは問題ないはずです。

関連する問題