问题
I am trying to insert multiple (1-50) entries from an Android application to an external Mysql database. I perfectly got a PHP script to work for single INSERT queries. But I am failing so far to make this work for a whole array of entries, most likely due to my limited understanding of PHP.
Android code:
List<NameValuePair> upload_array = new ArrayList<NameValuePair>();
upload_array.add(new BasicNameValuePair("mFirstname[0]", "FirstName 1"));
upload_array.add(new BasicNameValuePair("mFirstname[1]", "FirstName 2"));
upload_array.add(new BasicNameValuePair("mLastname[0]", "LastName 1"));
upload_array.add(new BasicNameValuePair("mLastname[1]", "LastName 2"));
upload_array.add(new BasicNameValuePair("mNickname[0]", "NickName 1"));
upload_array.add(new BasicNameValuePair("mNickname[1]", "NickName 2"));
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://url/script.php");
HttpResponse response = null;
try {
httppost.setEntity(new UrlEncodedFormEntity(upload_array));
response = httpclient.execute(httppost);
} catch (Exception e) {
e.printStackTrace();
}
And in PHP:
<?php
$connect = mysqli_connect("***","***","***", "***");
if(mysqli_connect_errno($connect))
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
else
{
echo "success";
}
$query = mysqli_prepare("INSERT INTO `namelist` (`firstname`,`lastname`,`nickname`)
VALUES(?,?,?)");
$mFirstname = $_POST['mFirstname'];
$mLastname = $_POST['mLastname'];
$mNickname = $_POST['mNickname'];
foreach($mFirstname as $key as $key => $value) {
$query->bind_param('sss',$value["mFirstname"],$value["mLastname"],$value["mNickname"];
$query->execute();
}
mysqli_close($connect);
?>
Is the mistake happening in the Android part of the code already or does this PHP script just not read the data I sent properly? Any insight would be very welcome.
回答1:
Ok, I made this work using a JSON Array. In case anyone has use for it, here's how it goes:
Android, create JSON String:
//Create JSON string start
String json_string ="{\"upload_fishes\":[";
//Repeat and loop this until all objects are added (and add try+catch)
JSONObject obj_new = new JSONObject();
obj_new.put("fish_id", your_looped_string_1[i]);
obj_new.put("fish_lat", your_looped_string_2[i]);
obj_new.put("fish_lon", your_looped_string_3[i]);
json_string = json_string + obj_new.toString() + ",";
//Close JSON string
json_string = json_string.substring(0, json_string.length()-1);
json_string += "]}";
Android send data to PHP (add try+catch):
HttpParams httpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParams, TIMEOUT_MILLISEC);
HttpConnectionParams.setSoTimeout(httpParams, TIMEOUT_MILLISEC);
HttpClient client = new DefaultHttpClient(httpParams);
String url = "http://yourserver.com/script.php";
HttpPost request = new HttpPost(url);
request.setEntity(new ByteArrayEntity(json_string.getBytes("UTF8")));
request.setHeader("json", json_string);
HttpResponse response = client.execute(request);
Log.d("FISHY", response.getStatusLine().toString());
PHP script:
<?php
//CONNECT TO THE DATABASE
$DB_HOST = 'yourhost.com';
$DB_USER = 'user';
$DB_PASS = 'password';
$DB_NAME = "db_name";
$mysqli = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
if(mysqli_connect_errno())
{
// echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
else
{
// echo "Connected to MySQL";
}
$postdata = file_get_contents("php://input");
$data = json_decode($postdata, true);
if (is_array($data['upload_fishes'])) {
foreach ($data['upload_fishes'] as $record) {
$fid = $record['fish_id'];
$flat = $record['fish_lat'];
$flon = $record['fish_lon'];
mysqli_query($mysqli,"INSERT INTO `fishes`(`fish_type_id`, `fish_lat`, `fish_lon`) VALUES ($fid, $flat, $flon)");
}
}
mysqli_close($mysqli);
?>
来源:https://stackoverflow.com/questions/18769711/insert-multiple-entries-from-android-php-mysql