推 Darkland:用 prepared statement 或是用 $mysql->real_escape_stri 12/30 00:08
→ Darkland:ng(json_encode(...)) 12/30 00:09
> -------------------------------------------------------------------------- <
作者: chaoms (小企鵝) 看板: PHP
標題: Re: [請益]直接將json塞進DB某筆資料欄位中 ?
時間: Sat Dec 29 17:49:14 2012
※ 引述《azureshin (azureshin)》之銘言:
: $xml_array = array();
: foreach($oXML->remarklist->remark as $oEntry){
: array_push($xml_array,$oEntry);
: }
: $q="update table set remark='".json_encode($xml_array)."' where bid='1' ";
: $mysqli->query($q);
: 這個問題卡很久
: 這是一個XML, 就假設是網誌的XML訂閱好了
: 一般來說, 資料在規劃時, 會將文章放一個table_A, 回覆的留言是另個table_B, 之後再
: 用文章id關聯.
: 但現在遇到特殊情形, 我希望將所有留言塞進一筆資料內, 也就是直接在文章table_A後
: 面再開一個欄位, 並將所有留言轉json後塞進去.
: (先不論之後會遇到什麼問題, 但目前的需求大概就是長這樣, 希望我有表達清楚..)
: 回正題
: remark是每篇回覆的母節點, 所以我想說先開一個array, 然後將remark丟進去, 這樣
: remark之下的子節點也會跟著丟進去.
: 之後再對這array進行json_encode, 一口氣塞進去文章內.
: 遇到了兩個問題
: 1. 塞進去的中文字, 讀出來時就不是中文了, 是編碼過後的文字, 但也長得很怪, 感覺
: 不太像印象中的json_encode, 好像少了跳脫符號(這個\) ? (ex:
: u9c81u8944u516cu59ecu5348 )
: 2. 從myadmin進去看該欄位時, 會發現雖然是json格式, 但不完整, 正確說法是會自行斷
: 行, 我猜跟第一點有關係.
: -----------
: 我有嘗試過直接在網頁上echo json_encode($xml_array);
: 是標準的json, 有 \ 符號, 也不會自己斷行造成錯誤....
: 將頁面上顯示的json_encode($xml_array)結果透過myadmin貼進資料庫也沒問題
: 唯獨透過程式丟進去就會出現\消失的問題....
: 我的欄位格式是text
mysql塞到資料庫時有 quote char...也就是你串sql cmd \ 符號被當跳脫字元吃掉了
不想管有什麼quote char的話..就直接
用prepare bind param 方式餵資料進去..就不會有這個問題
\uxxxx 這應該叫 Universal Character Name
JAVA在用的..你可以用ICONV 轉減少一點字元數..
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 1.170.238.54
推 azureshin:感謝, 正解 12/30 02:17