【发布时间】:2018-06-10 02:45:12
【问题描述】:
我正在 CodeIgniter 平台上工作(学习)。除了mysql语法之外,代码与普通PHP没有太大区别
问题
一位用户的余额为 100 美元。然后他报名参加了一场比赛。比赛的报名费为 50 美元。因此:
- 从 DB 获取余额
- 从从 DB 检索到的值中减去 5$0
- 使用新值更新数据库。
以上内容应该相当简单,但我得到了奇怪的结果。
Games_model
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。仍然是错误的结果。
最后我尝试了类型转换,正如您在上面的代码中看到的那样,但它仍然会产生错误的结果。
我得到的结果
在此示例中,我得到用户的balance,即 150。然后我尝试从中减去 50。我得到的结果是....-49 这真的很奇怪。
非常感谢任何帮助。
更新:
我已经调试了get_balance() 方法,可以确认检索到正确的余额。 问题发生在update_balance() 方法中。
更新 2:
当我尝试echo $balance = $this->get_balance($userID);在update_balance() 方法中,我得到了一个数组到字符串的转换。所以我怀疑这就是问题所在。
严重性:通知消息:数组到字符串转换文件名: models/Games_model.php 行号:130
更新 3
方法get_balance()的var_dump()
数组(大小=1)0 => 对象(stdClass)[41] public 'balance' => string '-49' (length=3)
【问题讨论】:
-
当你回显
update_balance()中的变量时,你得到了预期的结果吗?还是更新查询没有按预期工作? -
我可以确认更新查询正在工作,因为它将
balance更新为49。让我echoupdate_balance里面的一些 vars 回来报告 -
@Mike 请参阅更新 2
-
您应该使用整数类型(smallint、int、bigint)或浮点数。您不应该使用 varchar 来存储数字!
-
我知道我只是将它作为调试尝试
标签: php codeigniter mysqli codeigniter-3