JAVA / PHP:如何用java和php将多行插入DB? (使用mysqli)

时间:2012-11-15 17:04:43

标签: java php mysqli

我想在名为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));

with arrays(?):

    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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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