我有一个表,其中一列数据类型为BIT(1)。我正在使用codeigniter的活动记录来执行查询。但是bit的设置不起作用。有人知道怎么做吗?或者我必须回到正常的查询?
以下是代码段:
function itemUpdate($options=array()) {
if(isset($options['isAvailable']))
$itemDB->set('isAvailable',$options['isAvailable']);
$itemDB->where('id', $options['id']);
$itemDB->update('Item');
}
答案 0 :(得分:3)
我经常使用:
$this->db->set('foo', (int) !empty($options['foo']));
使0/1响应非常简单。
答案 1 :(得分:1)
我尝试过使用cakephp 1.3.10框架(php 5.2.9 | mysql 5.1.33)
$decimal_value = hexdec(bin2hex($bin_value));
像魅力一样!
答案 2 :(得分:0)
我刚刚发现了有关Codeigniter的信息,Active Record查询构建器会自动在值周围添加单引号,并且MySQL BIT类型不会接受值周围的单引号。
要查看实际生成的查询的内容,请在查询后立即添加此行:data.forEach(function (value, column) {
this.columns.push(column);
this.values.push(value);
console.log('columns', this.columns);
console.log('values', this.values);
});
您还可以echo $this->db->queries[0];
现在您将看到查询的问题,但我认为这只是因为您尝试设置BIT数据类型而存在的问题。
所以,这有效:
var_dump( $this->db );
这失败了:
// Given that $options['isAvailable'] = 12 and $options['id'] = 2
UPDATE Item SET `isAvailable` = 12 WHERE id=2
...它只会失败,因为你的列isAvailable是BIT类型。
上面,@ phil-sturgeon给了我们答案,但我们可以像这样简化:
UPDATE Item SET `isAvailable` = '12' WHERE id=2