2012-05-29 56 views
0

执行从文本文件加载的插入命令时出现问题。我使用codeIgniter“文件”助手加载一个SQL行,然后我执行一个简单的db->查询(content of my file)。问题是当sql从文件加载时,特殊字符会修整字符串的其余部分。codeigniter插入:特殊字符修整我的字符串值

下面是工作

INSERT INTO test(test) VALUES("<p>There is <strong>no special character</strong> in this string</p>"); 

实施例那将不起作用

INSERT INTO test(test) VALUES("<p>this character <em>é</em> is a <strong>special character</strong></p>"); 

在第二示例中的示例中,仅"<p> this character <em>"将被保存。这很奇怪,因为如果我在phpMyAdmin中执行相同的行,它可以正常工作。

任何人都知道为什么会发生这种情况?或者我做错了什么?

由于


下面是一个简单的 “步骤重现”。

简单表:

CREATE TABLE `test` (
`test` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL 
) ENGINE = InnoDB; 

的文件的 “application /视图/的text.txt” 包含:

INSERT INTO test(test) VALUES("<p>this character <em>é</em> is a <strong>special character</strong></p>"); 

我使用执行插入

$this->load->helper('file'); 
$loaded_sql = read_file(BASEPATH . "../application/views/test.txt"); 
$this->db->query($loaded_sql); 

的代码我的数据库配置

$db['default']['char_set'] = 'utf8'; 
$db['default']['dbcollat'] = 'utf8_general_ci'; 

CI配置

$config['charset'] = 'UTF-8'; 
+1

是UTF8编码的文本文件吗? – Mudshark

+0

当然,我没有检查。文件被编码ANSI(我想是默认的记事本编码)。我将该文件保存为UTF-8,但似乎不起作用。以下是CI显示的错误:'你的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以便在''附近使用正确的语法'INSERT INTO test(test)VALUES(“ 这个字符是' – Simmoniz

回答

2

我终于得到它。在读取文件时需要使用“utf8_encode()”来确定特殊字符的编码是否正确。文本文件必须以ANSI编码(默认记事本编码)。如果文件是UTF-8或UNICODE,它将不起作用!这解决了这个问题

代码:

$loaded_sql = utf8_encode(read_file(BASEPATH . "../application/views/test.txt")); 
1

尝试在表中插入记录之前使用。

$this->db->db_set_charset('latin1', 'latin1_swedish_ci'); 

确保您在表格&表格列中具有相同的设置。