2017-02-25 33 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; 
}