我想在名为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
答案 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脚本中循环以添加用户。