2015-10-18 23 views
1

我正在使用codeigniter/SQL。在哪裏我想插入unicode字符串與'N'前綴的插入。我怎樣才能在普通插入中實現它。codeigniter在sql中添加N查詢INSERT unicode文本

常規代碼:

$data = array(
    'title' => 'My title' , 
    'name' => 'My Name' , 
    'data' => 'My data' 
); 

$this->db->insert('mytable', $data); 

INSERT努力實現:

INSERT INTO mytable (title, name, data) 
VALUES ('My title','My Name',N'My data'); 

有什麼辦法來手動achive上面插入,而不是寫查詢?

+1

您應該重寫系統DB_driver.php'_insert()'方法,並自己檢查每個值並在需要時將其轉換爲N前綴。 [Check lines 1396 - 1399](https://github.com/bcit-ci/CodeIgniter/blob/develop/system/database/DB_driver.php)。 – Tpojka

回答

1

這是最簡單的方法。

$data = array(
    'title' => 'My title' , 
    'name' => 'My Name' , 
    'data' => 'N'.'My data' 
); 

$this->db->insert('mytable', $data); 

或者,如果前綴需要更有活力的做到這一點

$pre = foo(bar); 
$data = array(
    'title' => 'My title' , 
    'name' => 'My Name' , 
    'data' => $pre.'My data' 
); 

$this->db->insert('mytable', $data); 
0

我是有使用Codeignter 3 Unicode的問題,司機SQLSRV和我設法得到它的工作修改系統/數據庫/ DB_Driver.php。可能有更好的解決方案,它不是很漂亮,但它的工作,只需修改函數_insert和_update。

protected function _insert($table, $keys, $values) 
{ 
    foreach($values as $key => $value) 
    { 
     if(substr($value,0,1) == "'") 
     { 
      $values[$key] = "N". $value; 
     } 
    } 

    return 'INSERT INTO '.$table.' ('.implode(', ', $keys).') VALUES ('.implode(', ', $values).')'; 
} 




protected function _update($table, $values) 
{ 

     foreach($values as $key => $value) 
     { 
      if(substr($value,0,1) == "'") 
      { 
       $values[$key] = "N". $value; 
      } 
     } 

     foreach ($values as $key => $val) 
     { 
      $valstr[] = $key.' = '.$val; 
     } 



     return 'UPDATE '.$table.' SET '.implode(', ', $valstr) 
      .$this->_compile_wh('qb_where') 
      .$this->_compile_order_by() 
      .($this->qb_limit ? ' LIMIT '.$this->qb_limit : ''); 
} 
+0

當我們同時使用兩個不同的數據庫時,ur的解決方案不會很好。'N'用於SQL查詢..也可以在MySQL中使用它,所以如果我們更改核心文件,那麼這將得到影響。 – TomPHP