0

USERS という名前の mysql テーブルに N 個の行を挿入したいと考えています。単一の行を挿入するには、次のコードを記述します (動作します)。

PHP 側: insert_user.php

<?php   
    $mysqli = new mysqli('hostname', 'username','password', 'dbname');
    if (mysqli_connect_errno()) {
       printf("Can't connect Errorcode: %s\n", mysqli_connect_error());
       exit;
    }

    if ($result = $mysqli->prepare("INSERT INTO `users` (`email`, `imei`) VALUES (?,?)")) {
        $email = $_POST['email'];
        $imei = $_POST['imei'];

        $result->bind_param("ss", $email, $imei);
        $result->execute();
        $result->close();
        printf("Insert OK");
    } else {
        printf("Insert KO. ERROR: %s",mysqli_error());
    }

    $mysqli->close();     
?>

JAVA側

public void insertUser(String email
             , String imei) {

    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
    nameValuePairs.add(new BasicNameValuePair("email", email));
    nameValuePairs.add(new BasicNameValuePair("imei", imei));

    // send them on their way
    try {
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost("myserver.com/insert_user.php");
        httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        HttpResponse httpResponse = httpClient.execute(httpPost);
    } catch (e) {
        e.printStackTrace();
    }

}

質問

「 insert_ multi _user.php 」と相対的な Java メソッドの少し完全な例が必要です。より多くの行を渡します (配列を使用しますか? コレクションを使用しますか? わかりません...)。たとえば、次の Java 行を置き換えます。

    nameValuePairs.add(new BasicNameValuePair("email", email));
    nameValuePairs.add(new BasicNameValuePair("imei", imei));

配列 (?):

    nameValuePairs.add(new BasicNameValuePair("email", email[]));
    nameValuePairs.add(new BasicNameValuePair("imei", imei[]));

そして、phpでは、次を置き換えます:

    $email = $_POST['email'];
    $imei = $_POST['imei'];

と:

    $email[] = $_POST['email'];
    $imei[] = $_POST['imei'];

(明らかに、上記のコードはアイデアを提供するためのものであり、正しくありません...)

私は運の悪い日々を過ごしました:(ありがとう、Geltry

4

2 に答える 2

0

コードをforループでラップするだけです

ユーザーとのレコード/配列がある場合は、次のようなことができます

$users = array(...);
foreach($users as $user) {
    $mysqli->prepare("INSERT INTO `users` (`email`, `imei`) VALUES (?,?)")l
    $result->bind_param("ss", $user['email'], $user['imei']);
    $result->execute();
    $result->close();
}

ただし、これを行うには、データの送信方法を変更する必要があるため、1つずつ送信するのではなく、たとえばCSVファイルを送信し、fgetcsv各レコードで解析して実行します。

Java側では、POST配列を渡すこともできます。

List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();  
nameValuePairs.add(new BasicNameValuePair("user[0][email]","email1"));  
nameValuePairs.add(new BasicNameValuePair("user[0][imei]","imei1"));  
nameValuePairs.add(new BasicNameValuePair("user[1][email]","email2"));  
nameValuePairs.add(new BasicNameValuePair("user[1][imei]","imei2")); 

他のオプションは、JSON形式でデータをPHPスクリプトに送信し、json_decode

于 2012-11-15T17:09:33.813 に答える
0

PHP スクリプトへの引数として、配列 (Java から) を HTTP ポストに渡すことができるとは思えません。したがって、基本的に、Java コードは POST リクエストで一度に 1 人のユーザーを送信してユーザーを追加する必要があります... そのため、それをループでラップします。

オブジェクト配列をシリアル化し、それを PHP スクリプトが逆シリアル化できる PHP スクリプトにペイロードとして送信する方法があるかもしれませんが、配列をXML ファイル。次に、PHP スクリプトは XML を読み取り、PHP スクリプト内でループしてユーザーを追加します。

于 2012-11-15T17:13:36.627 に答える