使用codeigniter活动记录更新mysql位数据类型

时间:2010-09-15 09:59:44

标签: php activerecord codeigniter

我有一个表,其中一列数据类型为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');
}

3 个答案:

答案 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