【问题标题】:How to Properly Insert Decoded JSON to Mysql Database如何将解码后的 JSON 正确插入 Mysql 数据库
【发布时间】:2020-04-03 06:54:45
【问题描述】:

我一直在互联网上搜索如何使我的数据库的 php 代码正常工作,但我无法理解它!这就是为什么我别无选择,只能问一个问题,我希望有人能在这件事上帮助我或指导我。非常感谢任何帮助!

问题: 我想在mysql数据库中插入一个JSON格式的数据。

Android 中的字符串请求代码

public void insertCartProducttoDatabase() {

    StringRequest stringRequest = new StringRequest(Request.Method.POST,
            Constants.cartdata_url,
            new com.android.volley.Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    try {
                        JSONObject jsonObject = new JSONObject(response);
                        if (!jsonObject.getBoolean("error")) {
                            Toast.makeText(getApplicationContext(),
                                    jsonObject.getString("message"),
                                    Toast.LENGTH_LONG).show();
                            finish();
                        } else {
                            Toast.makeText(getApplicationContext(),
                                    jsonObject.getString("message"),
                                    Toast.LENGTH_LONG).show();
                        }

                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e("response", "" + error);
        }
    }) {

        @Override
        protected Map<String, String> getParams() {
            Map<String, String> params = new HashMap<String, String>();

            params.put(KEY_VC_ARRAY, convertedArray);
            //params.put(KEY_VC_BRANCH, branchid);
            return params;
        }
    };
    RequestHandler.getInstance(this).addToRequestQueue(stringRequest);
}

logcat 结果:这是来自我的回收站视图的数组结果

[
{
    "productname": "Siopao",
    "quantity": "3",
    "totalprice": 1500
},
{
    "productname": "Siomai",
    "quantity": "3",
    "totalprice": 297
},
{
    "productname": "Burger",
    "quantity": "4",
    "totalprice": 200
}
]

PHP 代码 DB Operations.php (UPDATEDv2)

//INSERT CART PRODUCTS 
    public function insertIndividualCart($cartarray){
        $receivedArray = $_POST['cartarray'];
        $new_array = json_decode($receivedArray,true);
        var_dump($new_array);

        $stmt = $this->con->prepare("INSERT INTO `cart_data` (`cartid`, `productname`, `quantity`, `totalprice`, `created`) 
        VALUES (NULL, ?, ?, ?, CURRENT_TIMESTAMP )");

        foreach($new_array as $row){ 

            $stmt->bind_param('ssi', $row['productname'], $row['quantity'], $row['totalprice']);

            if($stmt->execute()){
                return 1;
            }else{
                return 2;
            }
        }
    }

PHP 代码 cartData.php

<?php
require_once '../DbOperations.php';
$response = array();
if($_SERVER['REQUEST_METHOD']=='POST'){
if(
    isset($_POST['cartarray']) 
){
    //operations data
    $db = new DbOperations();

    $result = $db->insertIndividualCart(
        $_POST['cartarray']
    );

    if($result == 1){
        $response['error'] = false;
        $response['message'] = "Success";
    }elseif($result == 2){
        $response['error'] = true;
        $response['message'] = "Failed, Error Occured";
    }

}else{
    $response['error'] = true;
    $response['message'] = "Required Field are missing";
}

}else{
$response['error'] = true;
$response['message'] = "Invalid Request";
}
 echo json_encode($response);

我知道我的 php 代码 Dboperation.php 是错误的。只是我不知道如何开始我看到了一个视频,我必须首先解码来自 android 的数组,然后使用 foreach 和内部使用 Insert,我无法理解的是如何在我的数组上使用绑定参数刚刚解码?还是我需要?因为我的理解是为了让我的代码正常工作,我需要根据我在公共函数中使用的参数来使用绑定参数,对吗? (idk 什么叫我所说的公共函数就像这个“公共函数 insertIndividualCart($cartarray){}”)我只是一个初学者,所以放轻松!我别无选择,只能问,因为我真的无法理解他们在帖子中所做的事情。

【问题讨论】:

  • 请回复先生!我想我已经知道如何在数据库中插入单行,因为我已经在我的其他函数上做了它,先生,我的问题是如何插入来自 json 的数据或多个数据先生
  • 你的 SQL 中的".$row["productname"]." 是什么?你为什么拥有它?为什么要循环准备。不,你不知道如何在 SQL 中包含变量。再看一下链接的帖子。
  • 哦对不起先生,它只是在视频中他是如何做到的,我只是使用它我会再次看到链接先生
  • 也是循环先生,我刚刚在另一篇关于在阵列上绑定参数的帖子中看到了先生,但我真的不知道我在做什么我只是尝试过,先生,你能指导我先生吗怎么开始呢?

标签: php mysql json mysqli


【解决方案1】:

这不是一个完整的答案,但它应该让您知道哪里出错了。您需要在循环中执行查询。

public function insertIndividualCart($cartarray)
{
    $new_array = json_decode($cartarray, true);
    $stmt = $this->con->prepare("INSERT INTO `cart_data` (`cartid`, `productname`, `quantity`, `totalprice`, `created`) 
        VALUES (NULL, ?, ?, ?, CURRENT_TIMESTAMP)");

    foreach ($new_array as $row) {
        // you have 3 placeholders in SQL, so you need 3 variables bound
        $stmt->bind_param('sss', $row['productname'], $row['quantity'], $row['totalprice']);
        $stmt->execute();
    }

    return true;
}

看看它有多短?在循环之前准备查询,然后在循环内绑定值并执行

【讨论】:

  • 如果我继续我之前说的没有绑定参数的代码,我的代码会出现问题吗?只是出于好奇,因为它似乎在没有绑定参数的情况下可以正常工作,先生
  • 是的(可能在极少数情况下),但最重要的是,您完全没有理由编写凌乱的代码。坚持使用简单的推荐解决方案
  • 请看先生,我编辑了似乎正在工作的 dboperation.php 代码先生
  • 我明白了,我告诉你应该使用 bind_param。不要使用mysqli_real_escape_string。它使您的代码容易受到 SQL 注入的影响并且非常混乱。坚持使用 bind_param。
  • 再看一下先生,我仍然保留了一些代码,然后按照您的建议,先生,格式现在可以了吗? tyvm 回答我的问题!
猜你喜欢
  • 2019-03-28
  • 1970-01-01
  • 2015-01-23
  • 1970-01-01
  • 1970-01-01
  • 2014-04-26
  • 2013-11-14
  • 1970-01-01
  • 2013-03-25
相关资源
最近更新 更多