我正在 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');
}
游戏 Controller
//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->get_balance($userID);在 update_balance()
方法中,我得到一个数组到字符串的转换。所以我怀疑这就是问题所在。
Severity: Notice Message: Array to string conversion Filename: models/Games_model.php Line Number: 130
更新 3
var_dump()
方法 get_balance()
array (size=1) 0 => object(stdClass)[41] public 'balance' => string '-49' (length=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]);
}
关于php - 数据库类型 int 使用值进行计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50780151/