状态200 = HttpPut有效吗?

时间:2015-08-25 03:23:18

标签: php android mysql slim

我正在尝试修改数据库的值(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() {
    }
}

2 个答案:

答案 0 :(得分:0)

200状态对您的更新没有任何说明。

  • 您选择正确的数据库连接吗?
  • 您的查询看起来很正常,但我看不到参数值。你确定它们包含正确的值吗?
  • 您可以指定bindParam方法的数据类型
  • 您执行了更新&#39;,因此lastInsertId适用于&#39; insert&#39;

但是,你可以这样做:

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]);