在使用PHP进行编码和数据库插入之前,将复杂数据存储到MySQL BLOB中以检索处于相同状态的数据

我正在构build一个将复杂数据插入到MySQL表中的函数,用作创buildCSV文件的队列。 没有进入明确的细节,我想要的只是简单地使用json_encode将数组转换为序列化格式,使用预处理语句将其插入到MySQL表中,然后检索数据json_decode,并将原始数据以完全相同的格式它是在插入之前。

代码如下所示:

// Array data previously created foreach ( $array as $key => $element ) { $array[$key] = htmlspecialchars($element,ENT_QUOTES); } $this->db->query("UPDATE `table` SET `blob_field` = '".$this->db->escape($array)."' WHERE `id` = '".(int)$id."'"); 

然后我使用以下方法检索数据:

 $decoded_array = $this->db->query("SELECT `blob_field` FROM `table` WHERE `id` = '".(int)$id."'")->row['blob_field']; $decoded_array = json_decode($decoded_array); $decoded_array = array_map('htmlspecialchars_decode',$decoded_array); // Add to CSV using fputcsv standard process 

由此产生的CSV约为99.9%完美。 但是,当在Excel中打开时,大约有0.1%的行具有不应该跳跃的列。 而且,\ r \ n的每个实例似乎都被Windows换行符所取代。

我的问题是…我做错了什么? 为什么换行符会被replace为Windows,为什么在Excel中打开时CSV看起来很乱?