Тип базы данных int использовать значение для расчета с - PullRequest
0 голосов
/ 10 июня 2018

Я работаю (учусь) на платформе CodeIgniter.Код не сильно отличается от обычного PHP, за исключением синтаксиса mysql

Проблема

У пользователя есть баланс в 100 долларов.Затем он записывается на турнир.Стартовый взнос с турнира составляет 50 долларов.Таким образом:

  1. Получить баланс из БД
  2. Вычесть 5 $ 0 из значения, полученного из БД
  3. Обновить базу данных новым значением.

Выше должно быть довольно просто, но я получаю странные результаты.

Games_model

public function get_balance($userID)
    {
        $sql = "SELECT balance FROM users WHERE userID = '$userID'";
        $stmnt = $this->db->query($sql);
        if($stmnt->num_rows() > 0){
           $balance =  $stmnt->result();
           return $balance;
    }
return false;
    }

    public function update_balance($userID){
        //get balance
        $balance = $this->get_balance($userID);
        //charge for pool entry
        $newBalance = (int)$balance - (int)50;
        var_dump($newBalance);
        echo '<h1>'.$newBalance.'</h1>';
        $this->db->set('balance', (int)$newBalance);
        $this->db->where("userID", $userID); //table column field, second argument
        $this->db->update('users');

    }

Игровой контроллер

//Charge for picks #TODO add a check if user has enough funds to enter!!!!!
            echo $this->games_model->update_balance($this->session->userID);
            //Transferring data to Model uploaded
           echo $this->games_model->record_picks($data['picks']);

            $this->load->view('templates/header', $data);
            $this->load->view('games/record_picks', $data);
            //$this->load->view('templates/upcoming_fixtures_tbl', $data['games']);
            $this->load->view('templates/footer', $data);
        }

Что я сделал

Тип balance вБД был типа int(), однако получение этого значения и вычитание 50 дали неверные результаты.Затем я изменил поле balance на тип varchar() и попытался вычесть 50. Все еще неверный результат.

Наконец я попытался привести тип, как вы можете видеть в приведенном выше коде, однако он все равно дает неправильный результат.

Результат Я получаю

В этом примере я получаю balance пользователя, который равен 150. Затем я пытаюсь получить от него минус 50.И в результате я получаю ... -49, что действительно странно.

Любая помощь высоко ценится.

ОБНОВЛЕНИЕ :

Я отладил метод get_balance() и может подтвердить получение правильного баланса. Проблема возникает в update_balance() method.

Обновление 2:

Когда я пытаюсь echo $ balance = $ this-> get_balance ($ userID);внутри метода update_balance() я получаю преобразование массива в строку.Поэтому я подозреваю, что именно в этом проблема.

Серьезность: Уведомление Сообщение: преобразование массива в строку Имя файла: models / Games_model.php Номер строки: 130

Обновление 3

var_dump() метода get_balance()

array (size = 1) 0 => object (stdClass) [41] public 'balance' => строка '-49' (длина = 3)

1 Ответ

0 голосов
/ 10 июня 2018

Надеюсь, это поможет вам:

Примечание : задайте тип поля int вместо того, чтобы вписывать столбец balance в таблицу

возвращает одну строку вместо.Ваш get_balance должен быть таким:

public function get_balance($userID)
{
  $this->db->select('balance');
  $this->db->from('users');
  $this->db->where('userID',$userID);
  $query = $this->db->get();
  if ($query->num_rows() > 0)
  {
     return $query->row()->balance;
  }

  return false;
}

Ваш update_balance метод должен быть таким:

public function update_balance($userID)
{
    $balance = $this->get_balance($userID);

    $newBalance = ! empty($balance) ? ($balance - 50) : NULL;
    var_dump($newBalance);
    echo '<h1>'.$newBalance.'</h1>';

    $this->db->where("userID", $userID); 
    $this->db->update('users',['balance' => $newBalance]);
}
...