如何将json对象插入mysql字段并读回?

如何将json对象插入mysql字段并读回?,mysql,json,Mysql,Json,我有一个数组,我必须将其转换为json变量并将其存储在mysql表字段中,我通过以下代码来实现这一点: $arr = array( 'title_it' => $category->title->attributes()->it, 'desc_it' => $category->desc->attributes()->it, 'tags_it' => $category->tags->

我有一个数组,我必须将其转换为json变量并将其存储在mysql表字段中,我通过以下代码来实现这一点:

$arr = array(
        'title_it' => $category->title->attributes()->it,
        'desc_it' => $category->desc->attributes()->it,
        'tags_it' => $category->tags->attributes()->it,

        'title_es' => $category->title->attributes()->es,
        'desc_es' => $category->desc->attributes()->es,
        'tags_es' => $category->tags->attributes()->es,

        'title_fr' => $category->title->attributes()->fr,
        'desc_fr' => $category->desc->attributes()->fr,
        'tags_fr' => $category->tags->attributes()->fr,

        'title_en' => $category->title->attributes()->en,
        'desc_en' => $category->desc->attributes()->en,
        'tags_en' => $category->tags->attributes()->en,

        'title_de' => $category->title->attributes()->de,
        'desc_de' => $category->desc->attributes()->de,
        'tags_de' => $category->tags->attributes()->de
        );
    $params = mysql_real_escape_string(json_encode($arr));

    $query = mysql_query("INSERT INTO category_tags (id, params) VALUES ($id, '$params')") or die("could not connect");
然后我想读取此字段并仅显示属性title\u,我尝试了以下方法:

$query = mysql_query("SELECT * FROM article_tags WHERE id = $id LIMIT 0,1") or die("could not connect");    
$row = mysql_fetch_array($query);
$jsoni = json_encode($row['params']); 

$decoded = json_decode($jsoni, true);
echo $decoded->title_it;
但没有结果。此外,json以一种奇怪的格式存储。mysql字段如下所示:

object(SimpleXMLElement)#3 (1) {
  [0]=>
  string(3) "Your_Value"
}
{“0”:“0”:“描述”1“,”,描述它“““,”,描述它“““,”,标签它“““,”,标签它它“““:”0“:“0“:”Tag1“,,”标题,标题。。它“““,”标题。它:::::{“0”:“0”:“0”:“标题”1”,描述它“““,”,描述它的标签,描述它““““,”,标签,标签,标签,标签,它它是它“““““,”,标签,标签,标签,标签,它它它它它它““““““““,”,标签,标签,标签,标签,标签,标签,它是它它它它它它::::::::::::::::““““““,”,标签,标签,标签,标签,标签,标签,标签,标签,标签,标签,它它它它它它它它它它““““““““““““““:“description1”},“tags_en”:{“0”:“tags1”},“title_de”:{“0”:“titel1”},“desc_de”:{“0”:“beschreibung1”},“tags_de”:{“0”:“etikett1”}


那么……将这个json插入mysql字段,然后只读取该字段的一个参数,正确的方法是什么呢?

看起来就像

$category->title->attributes()->it,
类型值返回的是数组而不是字符串

Array(0=>"titolo1")
哪个成为目标

{"0":"titolo1"}

问题是,当您获取属性值时,SimpleXML不会返回字符串。当您执行
$category->title->attributes()->it
操作时,实际上会返回一个
SimpleXMLElement
对象。它如下所示:

object(SimpleXMLElement)#3 (1) {
  [0]=>
  string(3) "Your_Value"
}
在JSON中序列化时,它会转换为:
{0:“您的_值”}
,这就是您解码时看到的内容

将它们添加到数组时,需要将它们转换为字符串:

$arr = array(
    'title_it' => (string)$category->title->attributes()->it,
    'desc_it' => (string)$category->desc->attributes()->it,
    'tags_it' => (string)$category->tags->attributes()->it,
    # etc.
);

当您获取数据时,您不需要再次对其进行
json\u编码
,只需要对其进行
json\u解码

$query = mysql_query("SELECT * FROM category_tags WHERE id = $id LIMIT 0,1") or die("could not connect");
$row = mysql_fetch_array($query);

$decoded = json_decode($row['params'], true);
// The ",true" makes it into an array, not an object
echo $decoded['title_it'];

请不要在新的应用程序中使用
mysql\u query
。它已被弃用,如果使用不当会很危险,并且正在从PHP的未来版本中删除。像这样的现代替代品。像这样的指南将帮助您避免犯这样的错误。您正在编写
category\u tags
并阅读
article\u tags
?为什么是y你在做
$jsoni=json_encode($row['params']);
?难道
'params'
已经是一个json字符串了吗?我想你只需要
$decoded=json_decode($row['params'],true);
P.S.
,true
将它变成一个关联数组,而不是一个对象。你需要
echo$decoded['title'it']
我在发布问题时弄乱了表名。:)谢谢,这就搞错了:$decoded=json_decode($row['params',],true);echo$decoded['title\u it']][0];这并不完全正确。PHP数组并不总是关联的。这可能是因为“数组”实际上是一个对象,或者因为它的键被修改了(类似于
array\u-splice
,所以它们不是有序的)。这是我用代码读取的xml文件:foreach($xml->category as$category){……}