我有一个Android java方法,它调用远程php将数据插入到mysql表中。
这是 java代码客户端:
public static void insert(String email1, String email2) {
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("email1", email1));
nameValuePairs.add(new BasicNameValuePair("email2", email2));
try {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost("myserver:8080/insert.php");
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
//How to catch and print php echo() here??
}
这是 insert.php 服务器端(重新编辑):
<?php
$mysqli_connection = new mysqli("localhost:3306", "root", "password", "mydb");
if ($mysqli_connection->connect_errno) {
echo ("Connection Failure");
exit();
}
$stmt = $mysqli->stmt_init();
if ($stmt->prepare("INSERT INTO `mytable` (`email1`, `email2`) VALUES (?,?)")) {
echo 'Success';
$stmt->bind_param("ss", $_GET['email1'], $_GET['email2']);
$stmt->execute();
$stmt->close();
} else {
echo 'Error Inserting Content';
}
$mysqli->close();
?>
当我调用我的java insert()方法时,没有返回异常,但没有插入,mytable为空。
非常感谢你。 Geltry
答案 0 :(得分:3)
使用backtick
代替列名和/或tableNames的单引号
INSERT INTO mytable(`email1`,`email2`) VALUES('$email1','$email2')
你什么时候使用反击?
例如,
CREATE TABLE `hello word`(`Record ID` INT,....)
并且您的查询易受SQL Injection
攻击,请花些时间阅读以下文章
答案 1 :(得分:1)
查看您的HttpResponse/HttpEntity
。你应该看到'成功'或'插入内容错误'。您还可以在回复中添加具体的errno
和error
字符串,以查看哪些内容确实存在问题。
您还可以在请求中混合使用HTTP POST和HTTP GET。在客户端,您使用HttpPost对象,在服务器端,您希望设置_GET变量。您必须在两个侧使用GET或POST。否则客户端和服务器将无法相互理解。
使用HttpEntity.getContent(),您可以阅读InputStream
。另一种方法是使用EntityUtils.toString()来获取响应内容的字符串表示。