2016-04-12 18 views
-1

Ich verwende Angular zusammen mit SLIM, um eine REST-API mit Informationen zu Teams und Spielern zu entwickeln. Mein POST, GET und DELETE funktionieren einwandfrei, aber ich erhalte einen Fehler, wenn ich versuche, in die Player-Tabelle zu posten. Die Fehlermeldung lautet:Fehler bei der Verwendung der Aktualisierungsabfrage

Ungültige Parameternummer: Anzahl der gebundenen Variablen entspricht nicht

Ich habe alle meine gebundenen Variablen sah und ich kann nicht sehen, wo das Problem ist. Ich habe einige der relevanten Codes unten gezeigt, hoffentlich kann mir jemand helfen.

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/Winkelregler

$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' 
     } 
    }); 

}; 

An diesem Punkt zeigt die Konsole, dass die Informationen korrekt geschickt wurde und wie erwartet.

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

Sie binden den 'club_name', ohne ihn jemals in der Aktualisierungsabfrage zu verwenden. Das ist was die Fehlermeldung versucht, Ihnen ziemlich kryptisch zu sagen. – bspellmeyer

+0

Sie sollten sich darauf konzentrieren, Ihre Lesbarkeit zu erhöhen, damit Sie viel einfacher debuggen können .... – KDOT

Antwort

2

Da die Fehlermeldung die Anzahl der Variablen schon sagt, auf die Erklärung verpflichtet, die Anzahl der verwendeten Variablen nicht übereinstimmt tatsächlich in der Update-Abfrage: ist

Die club_name Parameter nie benutzt in der UPDATE Abfrage. Entfernen Sie einfach die

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

oder die club_name auf die Abfrage hinzufügen, und Sie sollten in Ordnung sein.

Verwandte Themen