如何使用php同时更新mysql数据库中的多行?

时间:2016-02-02 12:20:43

标签: php mysql json split decode

我正在使用谷歌的凌空以json格式发送一些数据,这就是我的数据:

Array([jsonarray]=>["BRMS01","BRMS05","BRMS04"])1

如何在像

之类的查询中解析并使用字符串“BRMS01”
"UPDATE stock_list SET qty=qty -1 where itembarcode='".$itembarcode."';";

这是我的凌空代码:

private void updateStock(){

JSONArray itemBarcodejson = new JSONArray();

for (int i=0; i< totalBarcodes.size(); ++i)
{
    try {
        itemBarcodejson.put(i, totalBarcodes.get(i));
    } catch (JSONException e) {
        e.printStackTrace();
    }
}

final String jsonArray = itemBarcodejson.toString().trim();
StringRequest stringRequest = new StringRequest(Request.Method.POST, UPDATE_URL,
        new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {

                Toast.makeText(AddInvEst.this, "Database updated"+response, Toast.LENGTH_LONG).show();

            }
        },
        new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        }){
    @Override
    protected Map<String, String> getParams() throws AuthFailureError {
        Map<String,String> params = new HashMap<>();
        params.put(KEY_JSONARRAY, jsonArray);
        return params;
    }
};

RequestQueue requestQueue =Volley.newRequestQueue(this);
requestQueue.add(stringRequest);

}

我觉得它就像下面的代码片段一样简单:

<?php
require "init.php";
$jsonArray=$_POST['jsonArray'];

foreach($jsonArray as &$value)
{
 $query ="UPDATE stock_list SET qty=qty -1 where itembarcode='".$value."';";

}

$res= mysqli_query($con,$query);

mysqli_close($con);
?>
  

要查看我传递给我的php代码到底是什么,我使用了exit(print_r($ _ POST));   我得到的回应是Array([jsonarray] =&gt; [“BRMS01”,“BRMS05”,“BRMS04”])1。如何解析这个可以帮忙吗?

感谢任何帮助。谢谢。

4 个答案:

答案 0 :(得分:1)

像这样使用:

<?php
require "init.php";
$jsonArray=json_decode($_POST['jsonarray']);  //edited this part

foreach($jsonArray as $value)
{
 $query ="UPDATE stock_list SET qty=qty-1 where itembarcode='".$value."'";
 $res= mysqli_query($con,$query);
}

mysqli_close($con);
?>

答案 1 :(得分:0)

Php没有为您自动解码JSON,您必须手动执行:

$jsonArray=json_decode($_POST['jsonArray']);

其余的可能保持不变。

答案 2 :(得分:0)

你应该能够在没有循环的情况下完成 - 如果你破坏了$_POST['jsonArray']并使用in之类的话:

"UPDATE `stock_list` SET `qty`=`qty`-1 where 
    `itembarcode` in ( '".implode( "','", $_POST['jsonArray'] )."' );";

更新:哎呀,最初我爆炸时我意味着内爆!它应该产生一个sql语句,如:

UPDATE `stock_list` SET `qty`=`qty`-1 where `itembarcode` in ('BRMS01','BRMS02','BRMS03');

/* based upon */

$_POST['jsonArray']=array("BRMS01","BRMS02","BRMS03");
$sql="UPDATE `stock_list` SET `qty`=`qty`-1 where `itembarcode` in ('".implode( "','", $_POST['jsonArray'] )."');";

答案 3 :(得分:0)

使用mysqli_multi_query

mysqli_multi_query - 执行由分号连接的一个或多个查询。

<?
require "init.php";
$jsonArray = json_decode($_POST['jsonArray']);

$runQuery="";

foreach($jsonArray as &$value) {
    $query ="UPDATE stock_list SET qty=qty -1 where itembarcode='".$value."';";
    $runQuery=$runQuery.$query;
}

if($runQuery!=''){
    $res = mysqli_multi_query($con,$runQuery);
}

mysqli_close($con);
?>

有关详情,请点击此Run many mySQL queries through php