我正在尝试修改数据库的值(MySQL
)。对于这个问题,我在我的HttPut
应用程序上使用Android
,在Slim framework
上使用XAMPP
作为PHP的微框架来管理数据库。
问题在于它不会修改我的数据库,但是当我使用response.getStatusLine().getStatusCode()
时它会给我200状态。
如果我不理解它,当你收到状态200时,这是因为请求已经成功。正如您在此处所见:status 200 OK
请求已成功。
我错过了什么吗?我明白了吗?为什么数据库不会改变?
P.S。如果您需要我提供一些代码,请在评论中告诉我。
编辑:这是我put
中的PHP script
方法。
$app->put("/cars/",function() use($app)
{
$name = $app->request->put("name");
$description = $app->request->put("description");
$idCar = $app->request->put("idCar");
try{
$connection = getConnection();
$dbh = $connection->prepare("UPDATE cars SET name = ?, description = ? WHERE idCar = ?");
$dbh->bindParam(1,$name);
$dbh->bindParam(2,$description);
$dbh->bindParam(3,$idCar);
$dbh->execute();
$connection = null;
header("HTTP/1.1 200");
header("Content-Type:application/json; charset=utf-8");
echo json_encode(array('status' => true),JSON_UNESCAPED_UNICODE );
}catch(PDOException $e)
{
echo "Error: " . $e->getMessage();
}
});
编辑2:这是我使用HttpPut
的代码。
class EditCar extends AsyncTask<Void, Integer, Void> {
private Car editCar;
EditCar(Car editCar) {
this.editCar = editCar;
}
protected void onPreExecute() {
}
protected Void doInBackground(Void... params) {
try {
String url = "http://IP of my computer/project/cars/";
HttpClient httpClient = new DefaultHttpClient();
HttpPut method = new HttpPut(url);
List<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>();
nameValuePairList.add(new BasicNameValuePair("name", editCar.getName()));
nameValuePairList.add(new BasicNameValuePair("description", editCar.getDescription()));
nameValuePairList.add(new BasicNameValuePair("idCar", Integer.toString(editCar.getIdCar())));
method.setEntity(new UrlEncodedFormEntity(nameValuePairList));
HttpResponse response = httpClient.execute(method);
} catch (Exception ex) {
Log.e("Error", ex.toString());
}
return null;
}
protected void onProgressUpdate() {
}
protected void onPostExecute() {
}
}
答案 0 :(得分:0)
200状态对您的更新没有任何说明。
但是,你可以这样做:
print_r([$name,$description,$idCar]); // temporaly line for debugging!
$dbh = $connection->prepare("UPDATE cars SET name = ?, description = ? WHERE idCar = ?");
$dbh->execute([$name,$description,$idCar]);
如果你使用&lt; PHP 5.4:[]必须是array()
答案 1 :(得分:0)
最后,我得到了解决方案。我不知道如何在我的HttpPut
方法上查看我的应用程序上使用了哪些数据,因此通过在Internet上搜索,我找到了一种方法来查看正在使用的数据。它是以下内容:
执行回复后,您可以将这两行:
HttpEntity entity = response.getEntity();
String responseText = EntityUtils.toString(entity);
然后,您可以使用HttpPut
查看Log
中发送的数据:
Log.d("response",responseText);
通过这种方法,我看到了正在发送的数组,并且它给了我一个错误,它告诉我我cannot add or update a child row
。这是因为$idCar
在另一个表中有一个引用(级联),而我发送的是另一个表中不存在的值。
当我发送第二个表中存在的值时,它正常工作!
编辑:要查看您使用的值数组,您必须添加
print_r([$name,$description,$idCar]);
在您的put方法内的php script
上以及设置变量值之后。像这样:
$name = $app->request->put("name");
$description = $app->request->put("description");
$idCar = $app->request->put("idCar");
print_r([$name,$description,$idCar]);