代码仅更新DB中的false值,但不是true

时间:2016-08-06 10:46:59

标签: php mysql codeigniter codeigniter-3

我有一个奇怪的情况,只有虚假状态保存到数据库中。当“state”应为true时,我的查询仍然执行false。

我有这个功能的控制器

public function change_active_state_post()
{
    $id['id_location'] = $this->input->post('id_location');
    $state['active'] = $this->input->post('state');
    var_dump($state['active']);
    $this->locations->update($state, $id);
}

这是MY_Model更新功能

function update($data,$conditions,$tablename=""){
    if($tablename=="")
        $tablename = $this->table;
    $this->db->where($conditions);
    $this->db->update($tablename,$data);
    var_dump($this->db->last_query());
    return $this->db->affected_rows();
}

当我发出取消激活位置的请求时,我会在我的日志中获取以下数据。数据库已正确更新

Location.php:196:string 'false' (length=5)
MY_model.php:46:string 'UPDATE `Locations` SET `active` = 'false'
WHERE `id_location` = '2'' (length=67)

但是当我提出激活位置的请求时,我会在我的日志中获取以下数据。和数据库值未更新

Location.php:196:string 'true' (length=4)
MY_model.php:46:string 'UPDATE `Locations` SET `active` = 'true'
WHERE `id_location` = '2'' (length=66)

问题是活动列永远不会更新为值1或true。它保持为0,但是如果我不想从1开始将其设为0,它将始终有效。

数据库中的活动列类型为tinyint(1)

如果您需要任何其他信息,请告知我们,我将提供:提前感谢

更新

这项额外检查帮助我正确插入数据

if($this->input->post('state') == 'true'){
   $state['active'] = true;
}else{
   $state['active'] = false;
}

1 个答案:

答案 0 :(得分:1)

此处引用'true',因此它将作为字符串插入:

MY_model.php:46:string 'UPDATE `Locations` SET `active` = 'true'

在MySQL中,'true''false'字符串在放入0列时会转换为tinyint(1),因为它们都不是正确的数值。

使用值01将有效。 MySQL还定义了常量FALSE0)和TRUE1),因此只要您不加引号而不是字符串,它们也会起作用。