繁体   English   中英

无法将数据从Android插入MySQL

[英]Cannot insert data from android to MySQL

问题描述

数据无法插入MySQL,但使用`print_r($ listItems)显示值。

我想将arraylist(SearchResults)从android发送到MySQLPhp MySQL 我现在面临的问题是数据没有插入MySQL

WorkDetails.java

  public void addWorkDetails(ArrayList<SearchResults> listItems)
    {
        JSONArray jsonArray = new JSONArray();
        try
        {
            for (SearchResults s : listItems)
            {
                JSONObject object= new JSONObject();
                object.put("project", s.getProject());
                String des=s.getDescription();
                String [] description=des.split(":");
                object.put("work_description", description[1]);
                Toast.makeText(getApplicationContext(), description[1],Toast.LENGTH_LONG).show();
                String per=s.getProgress();
                String [] progress=per.split(":");
                object.put("percentage", progress[1]);
                String in=s.getTimeIn();
                String []IN=in.split(":");
                object.put("timeIn", IN[1]);
                String out=s.getTimeOut();
                String []OUT=out.split(":");
                object.put("timeOut",OUT[1]);
                jsonArray.put(object);
            }
        }catch(JSONException e)
        {
            e.printStackTrace();
        }

        AddWorkDetails ru = new AddWorkDetails(jsonArray);
        ru.execute();
    }

    class AddWorkDetails extends AsyncTask<String, Void, String> {
        ProgressDialog loading;

        JSONArray jsonArray;
        AddWorkDetails(JSONArray jsonArray){
            this.jsonArray = jsonArray;
        }
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            loading = ProgressDialog.show(WorkDetailsTable.this, "Please Wait",null, true, true);
        }

        @Override
        protected String doInBackground(String... params) {
            HashMap<String, String> data = new HashMap<String,String>();
            data.put("listItems",jsonArray.toString());
            RequestHandler rh=new RequestHandler();
            String result = rh.sendPostRequest(Config.ADD_WORKDETAILS,data);
            return  result;
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            loading.dismiss();
            Toast.makeText(getApplicationContext(),s,Toast.LENGTH_LONG).show();
        }
    }

p

<?php
 if($_SERVER['REQUEST_METHOD']=='POST'){
    $mysqli = new mysqli("127.0.0.1:3307", "root", "", "androiddb");
    if ($mysqli->connect_errno) {
        echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
    }

    $listItems = json_decode($_POST['listItems'], true); 
    $sql="INSERT INTO work_details 
    (project, work_description, percentage, timeIn, timeOut) 
    VALUES 
    (?, ?, ?, ?, ?)"; 

    print_r($listItems);

    if (!($stmt = $mysqli->prepare($sql))) {
         echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error;
         foreach($listItems as $item){ 
            $stmt->bind_param("ssssss", $item['project'], $item['work_description'], $item['percentage'], $item['timeIn'], $item['timeOut']);
            if (!$stmt->execute()) {
                echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;
            }
        } 
    }
    $mysqli->close();
}
?>

输出量

在此处输入图片说明

使用显示值

print_r($listItems);

设定档

 public static final String ADD_WORKDETAILS="http://192.168.107.115:80/Android/CRUD/addWorkDetails.php";

你有

$sql="INSERT INTO work_details 
(project, work_description, percentage, timeIn, timeOut) 
VALUES 
(?, ?, ?, ?, ?)"; // 5 param

但是当绑定

$stmt->bind_param("ssssss", $item['project'], $item['work_description'], $item['percentage'], $item['timeIn'], $item['timeOut']); // 6 param

最初的问题是bind_param使用6个占位符,但实际的sql只有5个字段-大概第6个是twf

<?php
    if( $_SERVER['REQUEST_METHOD']=='POST' ){
        /* Typical port is 3306 */
        $mysqli = new mysqli('127.0.0.1:3307', 'root', '', 'androiddb');

        if ( $mysqli->connect_errno ) echo 'Failed to connect to MySQL';/* never reveal too much detail */
        else {

            $listItems = json_decode( $_POST['listItems'], true); 

            $sql='INSERT INTO `work_details` ( `project`, `work_description`, `percentage`, `timeIn`, `timeOut`, `twf` ) VALUES ( ?, ?, ?, ?, ? );'; 
            $stmt=$mysqli->prepare( $sql );

            if( $stmt ){
                foreach( $listItems as $index => $item ){

                    $project=$item['project'];
                    $description=$item['work_description'];
                    $percentage=$item['percentage'];
                    $timeIn=$item['timeIn'];
                    $timeOut=$item['timeOut'];
                    $twf=$item['twf'];

                    $stmt->bind_param('ssssss', $project, $description, $percentage, $timeIn, $timeOut, $twf );
                    $res=$stmt->execute();

                }
                $stmt->close();
            }
            $mysqli->close();
        }
    }
?>

下面的代码可以将listView数据插入php MySQL

 <?php
     if($_SERVER['REQUEST_METHOD']=='POST'){
        $mysqli = new mysqli("127.0.0.1:3307", "root", "", "androiddb");
        if ($mysqli->connect_errno) {
            echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
        }

        $listItems = json_decode($_POST['listItems'], true); 
        $sql="INSERT INTO work_details 
        (project, work_description, percentage, timeIn, timeOut) 
        VALUES 
        (?, ?, ?, ?, ?)"; 

        print_r($listItems);

        if ($stmt = $mysqli->prepare($sql)) {
             foreach($listItems as $item){ 
                $stmt->bind_param('sssss', $item['project'], $item['work_description'], $item['percentage'], $item['timeIn'], $item['timeOut']);
                if (!$stmt->execute()) {
                    echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;
                }
            } 
        }
        $mysqli->close();
    }
    ?>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM