【问题标题】:json_encode(array) insertion in dbjson_encode(array) 插入数据库
【发布时间】:2012-11-24 16:25:22
【问题描述】:

我的数组有一些值

  0 => '1'
  1 => 'moisturizer'
  2 => 'skincare'

我正在尝试将该数组转换为字符串,我目前正在使用json_encode

$value = array_shift( $val_ary ); //val_ary is that array
echo json_encode($value); // This will echo my data like

["1","moisturizer","skincare"]

稍后我想将这些值插入到我的 mysql 数据库表中

mysql_query("INSERT INTO TABLE (sno, type, category)
VALUES ('json_encode($value)')");

这应该有效吗?

或者我应该在插入数据库之前json_decode

【问题讨论】:

  • 您尝试插入数据库吗?
  • 没有。如果你对某些东西进行 json 编码,它就会变成一个整体的字符串。 MySQL 是 json-aware,你的查询将失败,试图将 json 字符串填充到 sno 字段中并且未定义类型/类别。
  • 为什么你一开始是 JSON 编码,当你的列列表识别出三个字段时尝试插入一个字符串值?
  • @MarkBaker 我的列列表是随机的。我现在只是在尝试更小的例子。
  • 为什么要首先使用 json?我认为您不需要将值插入数据库。

标签: php mysql arrays json insert


【解决方案1】:

JSON 是一种将数据表示为字符串的方法。它主要用于传输数据。

JSON 在这里没有位置,只是implode 数据,并在查询中使用它。

mysql_query("INSERT INTO TABLE (sno, type, category) VALUES ".
    "(" . implode(",", $value) . ")");

【讨论】:

    【解决方案2】:

    json_encode(array) 返回一个 json 字符串,而 MySQL 插入的值应该是 (value1,value2,...)。 json_decode(json_string) 返回一个数组,implode 将数组片段用 "," 分隔数组对象。如果您唯一要做的就是将其插入数据库,则无需将其转换为 json。通常 json 用于在页面/服务器之间传递信息(例如 AJAX 调用)或将数组作为字符串保存在数据库中

    如果你以 json 格式获取数据:

    $value = json_encode(array(value1,value2,...))
    

    mysql_query("INSERT INTO TABLE (sno, type, category) 
        VALUES ('".implode(",",json_decode($value))."')");
    

    如果你以数组的形式获取数据:

    $value = array(value1,value2,...)
    

    mysql_query("INSERT INTO TABLE (sno, type, category) 
        VALUES ('".implode(",",$value)."')");
    

    【讨论】:

    • . 字符用于 PHP 中的字符串连接。
    【解决方案3】:

    我认为您在这里不需要 JSON。你可以试试这些,

    $arr = array(0 => '1', 1 => 'moisturizer', 2 => 'skincare');
    mysql_query("INSERT INTO TABLE (sno, type, category) VALUES ('{$arr[0]}', '{$arr[1]}', '{$arr[2]}')");
    

    如果您的数组是多维的,那么您可以使用foreach 循环插入数据,

    $values = array();
    foreach($arr as $k=>$v){
       $values[] = "('{$v[0]}', '{$v[1]}', '{$v[2]}')";
    }
    mysql_query("INSERT INTO TABLE (sno, type, category) VALUES ".implode(',', $values));
    

    注意:不要使用 mysql_* 函数,它们很快就会被弃用。而是使用 PDO 或 MySqli 函数。

    【讨论】:

      猜你喜欢
      • 2011-11-19
      • 1970-01-01
      • 2013-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-28
      相关资源
      最近更新 更多