2017-02-25 30 views
1

我的表中有Json數據類型的列。 在這個專欄中,我記錄電話這樣的數據:如何更新MySql中的Json數據類型?

{"0": "044-33565388", "1": "044-33565399", "2": "044-33565311"}

對於存儲數據這樣的形式,我使用textarea並在新行中輸入的每個電話號碼。接下來傳遞數據到php文件,解析數據如下:

$phoneList = json_encode(explode("\r\n", $input), JSON_FORCE_OBJECT) 

並在mysql中插入數據。現在我想更新或刪除一些JSON數據。我嘗試這樣的事情,但得到的錯誤:

查詢:

​​

錯誤:

您的SQL語法錯誤;檢查對應於您的MySQL服務器版本的手冊,以在''0'附近使用正確的語法:「33565388」,「1」:「33565399」,「2」:「33565311」})WHERE seller_id = 8'at line 1

MySQL版本:5.7.9

現在,我能做些什麼來解決這個問題?

+0

' 「」'是錯字這裏' 「33565399」「}' ? – C2486

回答

1

首先,你需要了解的格式爲JSON_SET

JSON_SET(column_name, path, val[, path, val]...)

設定值

JSON_SET(`seller_phone`, "$.0", "33565388", "$.1", "33565399") 

所以你的查詢將是:

UPDATE `sellers` 
SET `seller_phone` = JSON_SET(`seller_phone`, "$.0", "33565388", "$.1", "33565399") 
WHERE `seller_id` = 8 
+0

謝謝,記錄更新了,但我有另一個問題。記錄的最後更新是「{」0「:」33565388「,」1「:」33565399「,」2「:」044-33565311「}'。我想刪除對象2.我該怎麼做? –

+1

你需要檢查如何使用JSON_REMOVE – Naincy

+0

@Naicy可以給我清楚的來源? –

0

我找到了解決辦法:

  1. $查詢:'UPDATE sellers SET seller_phone = "[]" WHERE seller_id = '.$seller_id;
  2. $查詢:'UPDATE sellers SET seller_phone = JSON_SET(seller_phone, '.$seller_phones.') WHERE seller_id = '.$seller_id;

注:

function explode_lines($seller_phones_input) { 
    return explode("\r\n", $seller_phones_input); 
} 

function array_to_query($seller_phones) { 

    $query = null; 

    for ($i = 0; $i < count($seller_phones); $i++){ 

     if ($i!=0){ 
      $query .= ", "; 
     } 

     $query .= '"$['.$i.']", "' . $seller_phones[$i] . '"'; 
    } 

    return $query; 
}