Insert-update utf8 string sql server + codeigniter Insert-update utf8 string sql server + codeigniter codeigniter codeigniter

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);}