2016-04-12 4 views
-1

Я использую Angular вместе с SLIM для разработки API REST с информацией о командах и игроках. Мои 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 в запросе, и вы должны быть хорошо.

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