int值求和 php,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 '

'.$newBalance.'

';

$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 '

'.$newBalance.'

';

$this->db->where("userID", $userID);

$this->db->update('users',['balance' => $newBalance]);

}

标签:codeigniter-3,codeigniter,mysqli,php

来源: https://codeday.me/bug/20191108/2010518.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值