2010-09-15 100 views
0

我有一個數據類型爲BIT(1)的數據類型的表。我正在使用codeigniter的活動記錄來執行查詢。但是位的設置不起作用。有沒有人知道如何做到這一點?或者我必須回到正常的查詢?使用codeigniter活動記錄更新mysql位數據類型

以下是代碼片段:

function itemUpdate($options=array()) { 
if(isset($options['isAvailable'])) 
    $itemDB->set('isAvailable',$options['isAvailable']); 
    $itemDB->where('id', $options['id']); 
    $itemDB->update('Item'); 
} 
+0

什麼活動記錄代碼,您正在使用? – vikmalhotra 2010-09-15 10:21:39

+0

'$ options ['isAvailable']'是什麼值? – Mischa 2010-09-15 12:42:13

+0

$ options ['isActive']可以是0或1 – Myth 2010-09-17 11:04:12

回答

3

我經常使用:

$this->db->set('foo', (int) !empty($options['foo'])); 

使0/1的反應相當萬無一失。

+0

$ options ['foo']在任何一種情況下都會給出1,如何將它轉換爲int? – shabby 2013-07-15 22:26:56

+0

不正確http://pastie.org/8149840 – 2013-07-17 18:08:37

+0

我認爲只需設置(int)就可以了,不需要!empty(n),因爲MySQL不喜歡纏繞BIT類型的單引號值。我有這個問題,只是用(int)將我的值聲明爲一個整數,瞧! – TARKUS 2017-06-19 11:02:07

1

我已經試過這使用CakePHP 1.3.10框架(PHP 5.2.9 | MySQL的5.1.33)

$decimal_value = hexdec(bin2hex($bin_value)); 

就像一個魅力!

+0

這是更通用的,可用於長度大於1的BIT。 – Birla 2014-07-04 08:43:12

0

我剛剛發現了關於Codeigniter的一點,Active Record查詢構建器自動爲值附加單引號,並且MySQL BIT類型不會接受值附近的單引號。

要查看實際生成的查詢是什麼,加入這一行立即查詢如下:echo $this->db->queries[0];

您也可以var_dump($this->db);

現在你會看到與查詢的問題,但它是一個問題,我認爲存在只是因爲你試圖設置一個BIT數據類型。

所以,在這個工程:

// Given that $options['isAvailable'] = 12 and $options['id'] = 2 
UPDATE Item SET `isAvailable` = 12 WHERE id=2 

這種失敗:

UPDATE Item SET `isAvailable` = '12' WHERE id=2 

...並因爲你列isAvailable是位類型的,只失敗。

以上,@菲爾 - 鱘魚給了我們答案,但我們只能把它簡化,像這樣:

$itemDB->set('isAvailable', (int) $options['isAvailable']); 
$itemDB->where('id', $options['id']); 
$itemDB->update('Item'); 
相關問題