Я использую 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);
}
}
Вы связываете 'club_name', не используя его в запросе на обновление. То, что сообщение об ошибке пытается сказать вам довольно загадочно. – bspellmeyer
Вы должны сосредоточиться на повышении читаемости, чтобы вы могли отлаживать намного проще ... – KDOT