Codeigniter db类截断插入文本

时间:2012-04-08 17:07:46

标签: php mysql codeigniter

我有一个codeigniter控制器,它从API接收json内容并将其插入到未更改的mysql longtext字段中。 一切都运行平稳了一段时间,但最近我注意到一些内容被截断。这是两个例子。

正在插入的表有三个字段

id int 
data longtext 
date_added datetime

我正在接收数据并使用活动记录插入功能将其直接添加到数据库中。它看起来像那样

$this->db->insert('received', array('data' => $data, 'date_added' => date('Y-m-d H:i:s')));

使用分析器,我监控了查询并找到了两个错误的查询:

INSERT INTO `received` (`data`, `date_added`) VALUES ('{\"status\":{\"lastMaintenanceAt\":0000,\"code\":304,\"period\":900},\"items\":[{\"permalinkUrl\":\"http://example.com\",\"updated\":0000,\"postedTime\":0000,\"summary\":\"Man\'s guarantees are like his words.\",\"title\":\"By: John\",\"content\":\"<p>Man&#8217;s guarantees are like his words.</p>\",\"id\":\"http://example.com\",\"actor\":{\"permalinkUrl\":\"\",\"displayName\":\"John\"}}],\"title\":\"Comments on: Banker refuses to give ‘Written Guarantee’\"}', '2012-04-08 00:28:29')

INSERT INTO `received` (`data`, `date_added`) VALUES ('{\"status\":{\"code\":304,\"period\":900,\"feed\":\"http://example.com\"},\"items\":[],\"title\":\"Comments on: Making her cry…\"}', '2012-04-08 00:49:35') 

查询似乎没问题。但是,只有部分JSON在第一种情况下将其转移到表中,它在"[...] refuses to give"后被截断,在making her cry后被截断。

查询未返回错误,并且正确插入日期。此外,如果我复制查询并在mysql命令提示符中执行它们,它们将插入全文。 这些查询是数百个其他成功的几个中的一个。

知道可能是什么问题吗?

谢谢

1 个答案:

答案 0 :(得分:2)

所有错误的查询都有一个共同点:它们有MS Word插入的“特殊字符”,例如: 。如果你可以转换/删除这些,那么你的问题应该消失。

<强>更新

对于CodeIgniter解决方案,您可以加载Text Helper库,然后对任何字符串使用ascii_to_entities函数,例如

$this->load->helper('text');
$desc = ascii_to_entities($desc);