這是最奇怪的問題。如果我將它作爲查詢字符串編寫,我的更新查詢將一致工作。這裏是我的模型功能:CodeIgniter UPDATE可以在第一次但不是連續的AJAX調用中工作
public function approveListing($params)
{
//This always works.
$sql = "UPDATE `assets` set approved = ".$params['approved']." WHERE as_id = ".$params['as_id']."";
$this->db->query($sql);
// and I use this select query to detect the actual updated value change.
$this->db->select('approved');
$this->db->where('as_id', $params['as_id']);
$query = $this->db->get('assets');
foreach($query->result() as $row)
{
$params['approved'] = $row->approved;
}
return $params;
}
...和輸出將是這個樣子:
as_id = 260
approved = 1 (or 0, if the input param is 0)
但是,如果使用查詢生成器方法,而不是一個SQL字符串,它的工作原理恰好一次:
public function approveListing($params)
{
// This only works on the first ajax call. After that, no update occurs.
$this->db->set('approved', $params['approved']); // this will be a value of 1 or 0
$this->db->where('as_id', $params['as_id']);
$this->db->update('assets');
$params['updated'] = $this->db->affected_rows();
// and I use this select query to detect the actual updated value change.
$this->db->select('approved');
$this->db->where('as_id', $params['as_id']);
$query = $this->db->get('assets');
foreach($query->result() as $row)
{
$params['approved'] = $row->approved;
}
return $params;
}
...和輸出將是這個樣子:
as_id = 260
approved = 1
updated = 0 <!- notice this is the affected_rows() value. :(->
$params['approved']
是1
或0
。在表assets
領域approved
是一個位(1)
的功能正在從控制器功能,它本身正在從一個AJAX調用被調用,它發送一組單選按鈕的點擊的變化稱爲(或者' 1'或'0')。
在查詢生成器更新的情況下,我還捕獲affected_rows。第一次執行查詢時,affected_rows()= 1。此後每次受影響的行數= 0,並通過檢查PHPMyAdmin中的記錄,我可以看到該值不想更改。
什麼是生成的更新查詢(使用$這個 - > DB-> last_query ())以及它與原始查詢有何不同? – TimBrownlaw
@TimBrownlaw這是生成的查詢:UPDATE'assets' SET'approved' ='1'WHERE'as_id' ='260'這看起來與手寫的sql字符串幾乎相同,但我認爲我看到了問題。因爲'批准'是一種BIT類型,我認爲它在引用價值的單引號:'approved' ='1'。 – TARKUS