我正在使用Android-Studio做一点MySql Crud并且数据提取工作得很好但我无法插入到数据库中,我认为问题可能是因为缺少写入权限(可能?)
无论如何,在给定的点上,用户在Register.java Activity
并按下按钮进行注册。这会调用onClick()
上的方法switch case R.id.BtRegs
。这会调用registerUser
方法调用ServerRequests class
。在doInBackground
我try
中使用我的网络LAN的IP连接到我的localhost,使用POST
方法调用Register.php
。
它不会从Register.php返回任何内容。
如何检查是否确实缺少其他东西的许可?我认为它可能没有许可,因为用于获取数据的相同方法运行良好。
以下是ServerRequests class
上执行连接的代码部分:
@Override
protected Void doInBackground(Void... params) {
Map<String,String> dataToSend = new HashMap<>();
dataToSend.put("name", user.name);
dataToSend.put("age", String.valueOf(user.age));
dataToSend.put("username", user.username);
dataToSend.put("password", user.password);
String encodedStr = getEncodedData(dataToSend);
BufferedReader reader = null;
try{
URL url = new URL(SERVER_ADDRESS + "/Register.php");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setConnectTimeout(CONNECTION_TIMEOUT);
con.setReadTimeout(CONNECTION_TIMEOUT);
con.setRequestMethod("POST");
con.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(con.getOutputStream());
writer.write(encodedStr);
writer.flush();
这是执行MySQL插入的Register.php
:
<?php
$con = mysqli_connect("host", "user", "pass", "db");
$name = $_POST["name"];
$age = $_POST["age"];
$username = $_POST["username"];
$password = $_POST["password"];
$statement = mysqli_prepare($con, "INSERT INTO tabuser (name, age, username, password) VALUES (?,?,?,?) ");
mysqli_stmt_bind_param($statement, "siss", $name, $age, $username, $password);
mysqli_stmt_execute($statement);
mysqli_stmt_close($statement);
mysqli_close($con);
?>
注意:考虑SERVER_ADDRESS = "http://192.168.x.x"
并且$con = mysqli_connect("host", "user", "pass", "db");
通常设置在主要项目上。
答案 0 :(得分:0)
问题已解决:
正如@ Redbeard011010评论的那样,缺少commit
导致了这个问题。
所以,在我添加的代码上:
$mysqli->autocommit(FALSE);
//do the inserting
if (!$mysqli->commit()) {
print("Transaction commit failed\n");
exit();
}
此后,代码正常工作,数据正在插入数据库。 更多信息here