数据库
首页 > 数据库> > php-数据库类型int使用值进行计算

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

作者:互联网

我正在CodeIgniter平台上工作(学习).除了mysql语法外,该代码与普通PHP并无太大不同

问题

用户的余额为100美元.然后,他报名参加比赛.比赛的入场费为50美元.从而:

>从数据库获得平衡
>从数据库中检索的值减去5 $0
>用新值更新数据库.

上面的内容应该很简单,但是结果却很奇怪.

游戏模型

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);
        }

我做了什么

db中的balance类型是int()类型,但是获取该值并减去50会得出错误的结果.然后,我将balance字段更改为varchar()并尝试减去50.结果仍然错误.

最后,我尝试了类型转换,如您在上面的代码中看到的那样,但是它仍然产生错误的结果.

结果我得到

在此示例中,我得到用户的余额为150.然后尝试从中减去50.我得到的结果是….- 49这真是奇怪.

任何帮助,不胜感激.

更新:

我已经调试了方法get_balance()并可以确认检索到正确的余额.该问题发生在update_balance()方法中.

更新2:

当我尝试回显$balance = $this-> get_balance($userID);在update_balance()方法内部,我得到了一个数组,用于字符串转换.所以我怀疑这就是问题所在.

Severity: Notice Message: Array to string conversion Filename:
models/Games_model.php Line Number: 130

更新3

get_balance()方法的var_dump()

array (size=1) 0 =>
object(stdClass)[41]
public ‘balance’ => string ‘-49’ (length=3)

解决方法:

希望这个能对您有所帮助 :

注意:将字段类型设置为int,而不是类型转换表中的余额列

返回单行.您的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]);
}

标签:codeigniter-3,codeigniter,mysqli,php
来源: https://codeday.me/bug/20191108/2010518.html