我正在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]);
}