Проблема с хранимыми процедурами, функция удаления выполняется, но удаление не выполняется в базе данных. Php, MySQL, Angularjs. - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть две таблицы в моей базе данных, 'tbl_player' и 'tbl_teams'.

Я пытаюсь реализовать хранимую процедуру, в которой, если я удаляю команду, игрок также должен быть удален. Проблема в том, что все работает без ошибок, и я вижу в консоли, что данные удалены, но в базу данных не вносятся изменения.

(кнопка внизу html вызывает функцию php)

HTML

<div class="container wrapper">
 <h1 class="text-center">Players in database</h1>
 <br/>
 <div class="">
  <nav class="navbar navbar-dark bg-dark">

   <form >
    <a><button class="btn btn-primary" ng-click="add_player()">Add 
      Player <span></span>
    </button></a>
   </form>
   <div>
    <span class="input-group-btn">
     <input type="text" class="form-control" placeholder="Search 
         Player">
    </span>
   </div>
  </nav>

  <div class="table-responsive">
   <table class="table table-hover">
    <tr>
     <th>Player ID</th>
     <th>Name</th>
     <th>Email</th>
     <th>Team</th>
    </tr>

    <tr ng-repeat="user in users track by $index">
     <td>{{user.PlayerID}}</td>
     <td>{{user.PlayerName}}</td>
     <td>{{user.PlayerEmail}}</td>
     <td>{{user.TeamName}}</td>
     <td>
       <button class="btn btn-warning" ng- 
          click="update_player(user.PlayerID, user.PlayerName, 
          user.PlayerEmail, user.TeamName)"><span ></span>Edit
       </button>
     </td>

     <td>
      <button class="btn btn-danger" ng-click="delete(user.PlayerID)" 
        title="PlayerDelete"><span></span>Delete
      </button>
     </td>
    </tr>
   </table>
  </div>
 </div>

 <div class="">
  <div class="table-responsive" >
   <table class="table table-hover">
    <tr>
     <th>Team ID</th>
     <th>Team Name</th>
    </tr>
    <tr ng-repeat="teams in teams track by $index">
     <td>{{teams.TeamID}}</td>
     <td>{{teams.TeamName}}</td>  
     <td>
      <button class="btn btn-danger" ng- 
       click="deleteTeam(teams.TeamID)" title="PlayerDelete"><span> 
       </span>Delete
      </button>
     </td>
    </tr>
   </table>
  </div>
 </div>
</div>

teamDelete.php

<?php
include 'DbConfig.php';

$data = json_decode(file_get_contents("php://input"));

$user = $data->id;

$sql = "CALL deleteTeam ('$user')";

if (mysqli_query($conn, $sql)) {
  echo "Team was deleted";
}
else {
 echo "Err Could not delete Team";
}
mysqli_close($conn);
?>

PlayerController

  $scope.deleteTeam = function(id) {
   console.log(id);
   $http.post("teamDelete.php", {'id':id});
   console.log("Deleted");
   $location.path('/');
   console.log("page loaded again");
  };

MySql

CREATE DEFINER=`root`@`localhost` PROCEDURE `deleteTeam`(IN id 
INT(255))
BEGIN
DECLARE EXIT HANDLER FOR SQLWARNING

BEGIN 
ROLLBACK;
END;

START TRANSACTION;

DELETE FROM tbl_player WHERE PlayerTeam = id;
DELETE FROM tbl_teams WHERE TeamID = id; 

END

1 Ответ

0 голосов
/ 30 апреля 2018

Похоже, отсутствует оператор COMMIT.

Если план предназначен для обработки транзакций в хранимой процедуре, похоже, что процедура должна завершить транзакцию и выполнить COMMIT в процедуре.

Как написано в настоящее время, когда возвращается вызов процедуры, мы повторяем «Команда была удалена», но работа в базе данных фактически не была завершена.

Звонящий знает только, что процедура вернулась. Он не знает, было ли обнаружено предупреждение, из-за которого был выдан оператор ROLLBACK.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...