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();
}

但要做到这一点,您必须更改提交数据的方式,所以不要一一提交,而是提交一个 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

我不相信您可以将数组(来自 Java)作为 PHP 脚本的参数传递到 HTTP 帖子中。因此,基本上,您的 Java 代码需要在 POST 请求中一次发送 1 个用户以添加用户......所以您将其包装在一个循环中。

可能有一种方法可以序列化对象数组并将其作为有效负载发送到 PHP 脚本,PHP 脚本可以在其中反序列化它,但我不知道你会如何做这样的事情,除了你可以将你的数组序列化为XML 文件。然后 PHP 脚本可以读取 XML 并在 PHP 脚本中循环以添加用户。

于 2012-11-15T17:13:36.627 回答