2014-07-02 398 views
1

將json字符串存儲在mysql表中存在小問題。 字符串例如:如何在mysql表中存儲json字符串

'{"variable":"content here with \" addsleshes "}' 

用json_encode創建。 使用簡單的mysqli_query函數將此字符串存儲在數據庫中。

mysqli_query('insert into ... values \'{"variable":"content here with \" addsleshes "}\' '); 

在此之後:

mysqli_query('select *..'); 
mysqli_fetch_array($res); 

當我從MySQL得到這個領域,並嘗試之前,「不能使用和addslashes功能使用PHP的json_decode它會返回NULL,因爲我不再有斜線。它還會添加斜線如\「變量\」 不知道如何解決這個問題

+0

你將不得不展示你如何存儲這個字符串,以及如何檢索它。正確完成的系統不會剝離文本中的斜槓。 –

+0

更新了問題。即時通訊使用現在進行測試只是mysqli_query funciton的情況下,我的數據庫類正在改變的東西,但仍然是同樣的問題 – abiku

+0

好吧,是的,你沒有正確逃脫該字符串。如果你有,json_encode添加的反斜槓將會進入數據庫。換句話說,你正在遭受[sql注入攻擊](http://bobby-tables.com)漏洞,而這個字符串「腐敗」是它的一個症狀。 –

回答

3

你爲什麼不嘗試顛倒它。

使用mysqli_escape_string實際上傳遞JSONmysqli_query

$json = '["Json","Just a Sample Data","Data 2"]' 
mysqli_query('insert into ... values'.mysqli_escape_string($json)); 

現在,當您從數據庫

mysqli_query('select *..'); 
mysqli_fetch_array($res); 

使用stripslashes($str)檢索數據從JSON刪除斜線之前。

它的工作方式與您正在尋找的方式相同。

0

嘗試:?

'{"variable":"content here with \\" addsleshes "}' 
+0

是的,正在考慮這個,但即時通訊使用json_encode從PHP數組中創建一個json字符串。所以我必須在使用json_enocde之前對每個數組單元格執行addslashes? – abiku

+0

沒有。 json_encode()會爲你做所有的轉義。你需要弄清楚從文本中刪除斜槓的地方。 –

相關問題