【问题标题】:Updating DB with JSON and PHP (Android)使用 JSON 和 PHP (Android) 更新数据库
【发布时间】:2016-09-11 05:15:56
【问题描述】:

我需要我的 Android 应用来更新数据库数据。我对 Android 开发和 PHP 都是新手,所以这对我来说有点新,但我真的需要这样做。这是我得到的:

相关的一段代码(发送到服务器的JSON对象):

HttpURLConnection conn = null;
OutputStream os = null;
InputStream is = null;

try {
    URL url = new URL("my-server/update.php");
    JSONObject jsonObject = new JSONObject();
    jsonObject.put("id_person", ""+me.getId());
    jsonObject.put("name", me.getName());
    jsonObject.put("surname", me.getSurname());
    jsonObject.put("lat", ""+me.getLatitude());
    jsonObject.put("lng", ""+me.getLongitude());
    jsonObject.put("phone", ""+123456789);
    String msg = jsonObject.toString();
    System.out.println(msg);

    conn = (HttpURLConnection) url.openConnection();
    conn.setReadTimeout(10000);
    conn.setConnectTimeout(20000);
    conn.setRequestMethod("POST");
    conn.setDoInput(true);
    conn.setDoOutput(true);
    conn.setFixedLengthStreamingMode(msg.getBytes().length);

    conn.connect();

    os = new BufferedOutputStream(conn.getOutputStream());
    os.write(msg.getBytes());
    os.flush();

    is = conn.getInputStream();

} catch (MalformedURLException e) {
    e.printStackTrace();
} catch (JSONException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
} finally {
    try {
        os.close();
        is.close();
    } catch (IOException e) {
        e.printStackTrace();
    }

    conn.disconnect();
}

我写的'msg'字符串(JSON)是

"{"id_person":"1","name":"T","surname":"Test","lat":"12.34","lng":"43.21","phone":"123456"}

还有我使用的php:

<?php

$json = file_get_contents('php://input');
$obj = json_decode($json);
$id_person = $obj->{'id_person'};
$name = $obj->{'name'};
$surname = $obj->{'surname'};
$lat = $obj->{'lat'};
$lng = $obj->{'lng'};
$phone = $obj->{'phone'};

require_once __DIR__ . '/db_connect.php';
$db = new DB_CONNECT();

$result = mysql_query("UPDATE person SET name = '$name', surname = '$surname', lat = '$lat', lng = '$lng', phone = '$phone' WHERE id_person = $id_person");
?>

这是做什么的: 没有例外,没有错误。应用程序的行为就像它完成的那样,但数据库上没有发生任何变化。所以我的猜测是我要么以错误的方式发送数据,要么在 PHP 文件中以错误的方式使用它们(或者可能两者兼而有之?)。

感谢所有试图提供帮助的人! ;)

【问题讨论】:

    标签: php android mysql json


    【解决方案1】:

    您当前在 SQL 查询行中有 $person_id 和 $id_person 作为变量名,因此 SQL 字符串不完整。

    顺便说一句 - mysql_* 是 php 中较旧的 mysql 扩展并且已被弃用,所以如果您是 php 新手,可能值得看看新选项 aka mysqli 或 pdo_mysql (http://php.net/manual/en/mysqlinfo.api.choosing.php)

    顺便说一句,您真的不希望像这样将参数直接传递到数据库查询中,因为它为 SQL 注入攻击打开了大门。例如,对于 mysqli 扩展,您通常会使用绑定参数 - http://php.net/manual/en/mysqli-stmt.bind-param.php

    【讨论】:

    • 谢谢,我想那将永远行不通。但是,即使在我修复了这个问题之后,我仍然遇到同样的问题。所以我想还有别的东西......谢谢你的提示,我会查一下,但现在我真的需要这个工作到明天......
    • 如果我将 json 设置为您的示例,并在本地运行它看起来查询在那时是有效的 - 我建议添加一些 echo 语句(如果您的应用程序将显示原始响应表单网络服务器,如果它错误)或使用 php 的 error_log 函数 (php.net/manual/en/function.error-log.php) 来了解正在发生的事情。
    • 是的,该行没有像我通过回显结果发现的那样更新。我设法修复了“错误”,只是 person 表中的“p”不是大写的(我不知道它必须是)。将其更改为 Person 并且它可以工作。感谢您的第一个提示,我接受您的回答,因为我在评论中说明了解决方案。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    • 1970-01-01
    • 2011-10-09
    • 1970-01-01
    • 2017-04-28
    • 1970-01-01
    相关资源
    最近更新 更多