Insert-update utf8 string sql server + codeigniter
Small change in SqlSrv driver solves the problem with unicode.Just add _make_unicode function code to /system/database/sqlsrv/sqlsrv_driver.php and replace the code for _insert and _update functions
/** * @param mixed $value */function _make_unicode($value){ if(is_string($value) && $value!="NULL")return "N".$value; else return $value;}/** * Insert statement * * Generates a platform-specific insert string from the supplied data * * @access public * @param string the table name * @param array the insert keys * @param array the insert values * @return string */function _insert($table, $keys, $values){ $values_string = ""; for($i=0;$i<count($values);$i++){ if($i==0){ $values_string.= $this->_make_unicode($values[$i]); }else{ $values_string.= ", ".$this->_make_unicode($values[$i]); } } return "INSERT INTO ".$this->_escape_table($table)." (".implode(', ', $keys).") VALUES ({$values_string})";}// --------------------------------------------------------------------/** * Update statement * * Generates a platform-specific update string from the supplied data * * @access public * @param string the table name * @param array the update data * @param array the where clause * @param array the orderby clause * @param array the limit clause * @return string */function _update($table, $values, $where){ foreach($values as $key => $val) { $valstr[] = $key." = ".$this->_make_unicode($val); } return "UPDATE ".$this->_escape_table($table)." SET ".implode(', ', $valstr)." WHERE ".implode(" ", $where);}// --------------------------------------------------------------------
Adding to Alex's answer (sorry not enough reputation to comment). Here are the same functions for CodeIgniter 3.1.1.
_insert_batch
/** * Insert batch statement * * Generates a platform-specific insert string from the supplied data. * * @param string $table Table name * @param array $keys INSERT keys * @param array $values INSERT values * @return string|bool */protected function _insert_batch($table, $keys, $values){ // Multiple-value inserts are only supported as of SQL Server 2008 if (version_compare($this->version(), '10', '>=')) { foreach($values as &$value) { $value = $this->_make_unicode($value); } return parent::_insert_batch($table, $keys, $values); } return ($this->db->db_debug) ? $this->db->display_error('db_unsupported_feature') : FALSE;}
_update
/** * Update statement * * Generates a platform-specific update string from the supplied data * * @param string $table * @param array $values * @return string */protected function _update($table, $values){ foreach ($values as &$value) { $value = $this->_make_unicode($value); } $this->qb_limit = FALSE; $this->qb_orderby = array(); return parent::_update($table, $values);}