【问题标题】:Data Insertion error while trying to insert a json array?尝试插入 json 数组时出现数据插入错误?
【发布时间】:2016-08-18 17:13:00
【问题描述】:

我正在尝试使用 google 的 volley 库将 json 数组发送到 mysql 数据库。 以下是我发送的数据类型:-

[{"vatno":"","area":"Testing bay","status":"0","cstno":"","dbname":"webappdb","name":"ANUP BORDE","emp_role":"Manager","password":"1223","key":"","city":"Pune","shop_name":"Test Shop","mobile":"8600931386"}]

我收到一个数据插入错误,例如:-

数据插入错误您的 SQL 语法有错误;检查 与您的 MySQL 服务器版本相对应的手册 在 'key,dbname,status,role)VALUES('', 'ANUP BORDE', '8600931386', '1223', 'Test Sho' 在第 1 行

我正在尝试运行这个 php 脚本。

<?php

        include "config.php";
        $dbname ="goldmine";
        $con = mysqli_connect($server_name,$mysql_user,$mysql_pass,$dbname);
         if(!$con)
         {
           echo "Connection Error".mysqli_connect_error();
         }
         else{
        //echo "";
         }

        $arrAssoc = json_decode(stripslashes($_POST['jsonarray']), true);
        $values="";
        foreach($arrAssoc as $aa){
                $values.="(";
                $values.=" '".$aa['']."',";
                $values.=" '".$aa['name']."',";
                $values.=" '".$aa['mobile']."',";
                $values.=" '".$aa['password']."',";
                $values.=" '".$aa['shop_name']."',";
                $values.=" '".$aa['area']."',";
                $values.=" '".$aa['city']."',";
                $values.=" '".$aa['vatno']."',";
                $values.=" '".$aa['cstno']."',";
                $values.=" '".$aa['key']."',";
                $values.=" '".$aa['dbname']."',";
                $values.=" '".$aa['status']."',";
                $values.=" '".$aa['role']."'";
                $values.="),";
        }
        $values=rtrim($values,',');
                //Insert into goldmine_users (name,mobile,password,role)Values('Anup','8600931386','123','admin');

        $query="INSERT INTO goldmine_users(name,mobile,password,shop_name,area,city,vatno,cstno,key,dbname,status,role)VALUES".$values;

        if(mysqli_query($con,$query))
        {
        echo "Data inserted";
        }else
        {
       echo "Data insertion error".mysqli_error($con);
        }


?>

这是我将数据发送到 mysql 数据库的凌空代码。

public void registerUser()
{
    final String jsonArray = rolejson.toString().trim();
    Log.d("JSON RESPONSE",jsonArray);
    StringRequest stringReq = new StringRequest(Request.Method.POST, REGISTERUSER, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {

            Log.d("USER INFO RESPONSE",response);
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {

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

    RequestQueue rq = Volley.newRequestQueue(this);
    rq.add(stringReq);
}

这是我的数据库的样子:-

欢迎任何帮助或建议。我认为我在某个地方犯了一个愚蠢的错误,如果有人能指导我找到正确的解决方案,那就太好了。

【问题讨论】:

  • "key" 是大多数数据库实现的保留关键字。您是否确保以反引号或类似的方式对其进行转义?
  • 非常感谢@911DidBush。你解决了我的问题

标签: java php android mysql json


【解决方案1】:
 $query="INSERT INTO goldmine_users(name,mobile,password,shop_name,area,city,vatno,cstno,key,dbname,status,role)VALUES".$values;

key 是一个保留关键字,因此应该在反引号(或类似的东西)中转义

 $query="INSERT INTO goldmine_users(`name`,`mobile`,`password`,`shop_name`,`area`,`city`,`vatno`,`cstno`,`key`,`dbname`,`status`,`role`)VALUES".$values;

【讨论】:

    【解决方案2】:

    您的列数与您要插入的数据不匹配。您尝试在 12 列中插入数据,但您提供了 13 列数据:

                $values.="(";
                $values.=" '".$aa['']."',"; //Remove this line
                $values.=" '".$aa['name']."',";
                $values.=" '".$aa['mobile']."',";
                $values.=" '".$aa['password']."',";
                $values.=" '".$aa['shop_name']."',";
                $values.=" '".$aa['area']."',";
                $values.=" '".$aa['city']."',";
                $values.=" '".$aa['vatno']."',";
                $values.=" '".$aa['cstno']."',";
                $values.=" '".$aa['key']."',";
                $values.=" '".$aa['dbname']."',";
                $values.=" '".$aa['status']."',";
                $values.=" '".$aa['role']."'";
                $values.="),";
    
    //12 columns
    
    $query="INSERT INTO goldmine_users(name,mobile,password,shop_name,area,city,vatno,cstno,key,dbname,status,role)VALUES".$values;
    

    【讨论】:

    • 我确实删除了那行它不起作用它给了我同样的错误。
    • 你能在 foreach 之后做一个echo $values;,然后在你的问题中发布结果吗?
    • @user3295583 删除了我的答案,因为 Daan 提出了同样的建议。
    • Rohit 我不能删除你的答案。你必须删除你的答案。无论如何谢谢你。
    猜你喜欢
    • 1970-01-01
    • 2016-04-30
    • 1970-01-01
    • 1970-01-01
    • 2014-08-10
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多