数据库类型int使用值进行计算

时间:2018-06-10 02:45:12

标签: php codeigniter mysqli codeigniter-3

我在CodeIgniter平台上工作(学习)。除了mysql语法

之外,代码与普通PHP没有太大区别

问题

用户的余额为100美元。然后他报名参加锦标赛。锦标赛的参赛费为50美元。因此:

  1. 从数据库获取余额
  2. 从DB
  3. 中检索的值减去5 $ 0
  4. 使用新值更新数据库。
  5. 以上应该相当简单,但我得到了奇怪的结果。

    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()方法中。

    更新2:

    当我尝试echo $ balance = $ this-&gt; get_balance($ userID);在update_balance()方法中,我得到一个数组到字符串转换。所以我怀疑这就是问题所在。

      

    严重性:通知消息:数组到字符串转换文件名:   models / Games_model.php行号:130

    更新3

    方法var_dump()

    get_balance()

      

    array(size = 1)0 =&gt;       对象(stdClass的)[41]         public'balance'=&gt;字符串'-49'(长度= 3)

1 个答案:

答案 0 :(得分:3)

希望这会对您有所帮助:

注意:设置字段类型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]);
}