我在CodeIgniter平台上工作(学习)。除了mysql语法
之外,代码与普通PHP没有太大区别问题
用户的余额为100美元。然后他报名参加锦标赛。锦标赛的参赛费为50美元。因此:
以上应该相当简单,但我得到了奇怪的结果。
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)
答案 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]);
}