使用php为json数组更新mysql中的多行


Updating multiple rows in mysql using php for a json array?

我有一个json数组,需要对其进行解析,以便在一个mysql查询中更新多行。

这是我的json数组:

[{"doc_no":"ADV103","voucher_status":"closed","voucher_id":"URDV1000"}
,{"doc_no":"ADV103","voucher_status":"closed","voucher_id":"URDV1001"}
,{"doc_no":"ADV103","voucher_status":"closed","voucher_id":"URDV1003"}]

我正在尝试这样的更新查询:-

$query="UPDATE urd_voucher_table SET voucher_status ='$status', doc_no = '$docNo' WHERE voucher_id ='$vc_id'";

我想知道如何解析上面的json,以便获得voucher_status、doc_no和voucher_id的单独值。

感谢您的帮助。非常感谢。

使用json_decode()

解码JSON并在解码的数组上循环。

<?php
$json = '[{"doc_no":"ADV103","voucher_status":"closed","voucher_id":"URDV1000"},{"doc_no":"ADV103","voucher_status":"closed","voucher_id":"URDV1001"},{"doc_no":"ADV103","voucher_status":"closed","voucher_id":"URDV1003"}]';
$arr = json_decode($json, TRUE); // Observe the second parameter. If it is TRUE, associative array will be returned irrespective of what json is.
if (! empty($arr)) {
    foreach ($arr as $elem) {
        extract($elem);
        $query="UPDATE urd_voucher_table SET voucher_status ='$voucher_status', doc_no = '$doc_no' WHERE voucher_id ='$voucher_id'";
        // Add your code here.
    }
}

extract()的引用

使用json_decode(),它将返回一个具有键、值对的关联数组,如:

    $strJson = '[{"doc_no":"ADV103","voucher_status":"closed","voucher_id":"URDV1000"},{"doc_no":"ADV103","voucher_status":"closed","voucher_id":"URDV1001"},{"doc_no":"ADV103","voucher_status":"closed","voucher_id":"URDV1003"}]';
  $arr = json_decode($strJson);

将返回:

数组([0]=>stdClass对象([doc_no]=>ADV103[voucher_status]=>closed[voucher.id]=>URDV1000)[1]=>stdClass Object([doc_no]=>ADV103[voucher_status]=>closed[voucher_id]=>URDV1001)[2]=>stdClass Object([doc_no]=>ADV103[vouche_status]=>closed[vougher_id]=>URDV1003)

现在使用循环可以获取数据&插入/更新数据库。

您需要将json字符串解码为一个数组,遍历结果并运行更新查询。请看下面的例子。。。

$rows = json_decode('[{"doc_no":"ADV103","voucher_status":"closed","voucher_id":"URDV1000"},{"doc_no":"ADV103","voucher_status":"closed","voucher_id":"URDV1001"},{"doc_no":"ADV103","voucher_status":"closed","voucher_id":"URDV1003"}]');
foreach ($rows as $row) {
    $query="UPDATE urd_voucher_table SET voucher_status ='{$row['voucher_status']}', doc_no = '{$row['doc_no']}' WHERE voucher_id ='{$row['voucher_id']}'";
    // ... Run query etc..
}

首先使用json_encode(),然后在foreach中迭代结果数组。如下所示:

$jsonString  = '[{"doc_no":"ADV103","voucher_status":"closed","voucher_id":"URDV1000"},{"doc_no":"ADV103","voucher_status":"closed","voucher_id":"URDV1001"},{"doc_no":"ADV103","voucher_status":"closed","voucher_id":"URDV1003"}]';
$json_decoded = json_decode($jsonString);
foreach($json_decoded as $index=>$val){
    $status = $val->voucher_status;
    $docNo = $val->doc_no;
    $vc_id = $val->voucher_id;
    $query="UPDATE urd_voucher_table SET voucher_status ='$status', doc_no = '$docNo' WHERE voucher_id ='$vc_id'";
    //execute query here
}

有关http://www.geeksengine.com/database/data-manipulation/bulk-insert.php

按照以下步骤

  1. 解码json
  2. 对每条记录应用foreach循环
  3. 为JSON中的每条记录构建并连接该部分的数据例如(a,e,r),(br,t,y),(t,y,c);

  4. 在查询"Insert into table (c1,c2,c3) VALUES"中对该部分进行硬编码

  5. 以及在step 3中创建的attche数据

最终查询将是

 Insert into table (c1,c2,c3) VALUES . STEP 3