Я хотел вставить данные с Android в базу данных MySQL. После вставки записи я хочу получить последний идентификатор вставки и получить значение lastID. Является ли это возможным? Как я могу этого добиться? Любая помощь будет оценена.

 addInformation(status, timeIn);

 lastID =? // what should I write in order to get the last ID ? 

  public void addInformation(final String name, final String weather, final String date2, final String status, final String timeIn, final String timeOut) {
        class AddInfo extends AsyncTask<String, Void, String> {
            ProgressDialog loading;

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

            @Override
            protected void onPostExecute(String s) {
                super.onPostExecute(s);
                loading.dismiss();
                Toast.makeText(getApplicationContext(),s, Toast.LENGTH_LONG).show();
                //addWorkForce(Sub, NoP, NoH, Long.parseLong(s));
               // addWorkDetails(results, Long.parseLong(s));
            }

            @Override
            protected String doInBackground(String... params) {

                HashMap<String, String> data = new HashMap<String, String>();
                data.put(Config.KEY_USER_NAME, name);
                data.put(Config.KEY_WEATHER, weather);
                data.put(Config.KEY_DATE, date2);
                data.put(Config.KEY_STATUS, status);
                data.put(Config.KEY_TIMEIN, timeIn);
                data.put(Config.KEY_TIMEOUT, timeOut);
                RequestHandler rh = new RequestHandler();
                String result = rh.sendPostRequest(Config.ADD_INFORMATION, data);
                return result;
            }
        }

        AddInfo ru = new AddInfo();
        ru.execute(name, weather, date2, status, timeIn, timeOut);
    }

ADD_INFORMATION.php

<?php 

    if($_SERVER['REQUEST_METHOD']=='POST'){

        //Getting values

        $status = $_POST['status'];
        $timeIn = $_POST['timeIn'];


        //Creating an sql query
        $sql = "INSERT INTO information(status, time_in) VALUES ('$status', '$timeIn')";

        //Importing our db connection script
        require_once('dbConnect.php');

        //Executing query to database
        if(mysqli_query($con,$sql)){
            echo 'Information Added Successfully';
            $insertId=mysql_insert_id();
            echo json_encode($insertId);
        }else{
            echo 'Could Not Add Information';
        }

        //Closing the database 
        mysqli_close($con);
    }
?>

Я хочу получить $ insertId и поместить в lastID

-3
John 4 Янв 2016 в 16:04

3 ответа

Лучший ответ

Основываясь на комментариях, я создаю новый ответ, поскольку оба моих ответа верны в основном. Я сделал пример, работая с android (apache commons 4.5.1) и php 5.6. Обе версии (4.5.1, 5.6) не являются требованиями, просто то, что я использую прямо сейчас.

Предположим, у вас есть таблица mysql под названием информация с полями status , time_in и с другим полем, отмеченным как AUTO_INCREMENT .


Часть Java

В исходной функции :: doInBackground (String ... params) вы могли бы иметь

HttpClient client = HttpClients.createDefault();
HttpPost httpPost = new HttpPost("http://localhost/so/sendrequest/addInformation.php");

try{
   List<NameValuePair> data = new ArrayList<NameValuePair>(2);
   data.add(new BasicNameValuePair("status", "ok"));
   data.add(new BasicNameValuePair("timein", "12:55"));
   httpPost.setEntity(new UrlEncodedFormEntity(data));
   String response = EntityUtils.toString(client.execute(httpPost).getEntity());
   System.out.println(response); //here you have your insertid
}catch(ClientProtocolException e){
   // TODO Auto-generated catch block
}catch(IOException e){
   // TODO Auto-generated catch block
}

На основе нативной Java

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

И общие ресурсы apache, которые должны быть включены в библиотеку Android (ссылка для скачивания, если нет)

import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

Часть PHP

addInformation.php

<?php

class AddInformation
{

   function response(){
      /** @var mysqli $con */
      require_once('dbConnect.php'); //$con = new mysqli('127.0.0.1', 'root', '', 'so');
      $status = $con->real_escape_string($_POST['status']);
      $timein = $con->real_escape_string($_POST['timein']);

      $con->query("INSERT INTO information (status, time_in) VALUES ('$status', '$timein')");
      echo $con->insert_id;
   }
}

$ai = new AddInformation();
$ai->response();
1
Reloecc 4 Янв 2016 в 16:41

В сценарии ADD_INFORMATION все, что вам нужно сделать, это получить данные после оператора вставки. Поэтому я бы использовал что-то похожее на приведенное ниже:

<?php 

    if($_SERVER['REQUEST_METHOD']=='POST'){

        //Getting values

        $status = $_POST['status'];
        $timeIn = $_POST['timeIn'];


        //Creating an sql query
        $sql = "INSERT INTO information(status, time_in) VALUES ('$status', '$timeIn')";

        //Importing our db connection script
        require_once('dbConnect.php');

        //Executing query to database
        if(mysqli_query($con,$sql)){
            $sql = "SELECT * FROM INFORMATION ORDER BY time_in DESC LIMIT 1";
            echo $sql;
            $insertId=mysql_insert_id();
            echo json_encode($insertId);
        }else{
            echo 'Could Not Add Information';
        }

        //Closing the database 
        mysqli_close($con);
    }
?>

На самом деле я создал оператор SELECT для данных, которые я только что вставил в оператор INSERT.

Надеюсь это поможет.

1
Michele La Ferla 6 Янв 2016 в 07:54

Во-первых, линия

 echo 'Information Added Successfully';

Нарушит ваш формат json, я предлагаю вам отформатировать желаемый json, например

{"status": "ok", "message": "Information Added Successfully", "data": {"lastid": 1234}}

После этого читайте, что делать с

String result = rh.sendPostRequest(Config.ADD_INFORMATION, data);

В Как преобразовать String в JSONObject в Java. Наиболее удовлетворительный подход - подготовить класс java для ответа json, например. подобно

class AddInformationResponse
{

   public String status;
   public String messsage;
   public ObjectNode data;
}

Вы можете прочитать, как сопоставить json с объектом java в одно из многих руководств.

1
Community 23 Май 2017 в 12:04