【问题标题】:Android / PHP / MySQL result of query json_encodeAndroid / PHP / MySQL查询json_encode的结果
【发布时间】:2014-02-12 15:28:28
【问题描述】:

我在从本地服务器获取数据到 Android 应用程序时遇到了一些问题。 架构:Android - PHP/Query - MySQL 数据库。

这是调用执行查询的函数(在 db_function.php 中)的函数(在 loadData.php 中):

     $exists = $db -> loadData($id);

在 db_function.php 中,函数如下所示:

public function loadData($app_cust_id) {

    $results = mysql_query("SELECT * FROM ...")  or die (mysql_error());    

         $messages = array();

            if (mysql_num_rows($results)) {

              while ($result = mysql_fetch_assoc($results)) {

              $messages[] = $result;

              }
            }
            return $messages;

...现在回来...我要写什么才能返回数组结果并回显正确的 json_encode?我是否必须创建一个新数组,循环遍历结果并将其存储在新数组中?

    $result = $db -> loadData($id);

        // ???
        $response["success"] = 0;
        echo json_encode($response);

编辑:

    $result = $db -> loadData($id);
    $result["success"] = 0;
    echo json_encode($result);

所以我做了这些改变。似乎没有数据发送回我的 java 函数。 logcat 说:“解析数据 org.json.JSONException 时出错:字符 0 处的输入结束”我没有找到解决方案。任何人都可以告诉我如何在 java 中使用正确的 json_encode 和正确的 jsonparser 进行处理。非常感谢!

  JSONObject json = jsonParser.getJSONFromUrl(URL, params);;

【问题讨论】:

    标签: php mysql


    【解决方案1】:
    $result = $db -> loadData($id);
    

    loadData 方法返回的内容存储在名为 $result 而不是 $response 的变量中。因此它应该是:

        // not $response["success"] =0; 
        $result["success"] = 0;
        echo json_encode($result);
    

    【讨论】:

      【解决方案2】:

      就我个人而言,我不会将您的 success 元素混入包含您的消息的同一数组中。我会这样做:

      $response = array();
      $messages = $db->loadData($id);
      $response['success'] = 0;
      $response['messages'] = $messages;
      echo json_encode($response);
      

      现在我注意到你的函数中绝对没有错误处理或边缘情况处理(如果有错误你就会死)。如果查询失败,您应该向调用客户端返回什么?如果没有找到消息怎么办?

      最后,关于您如何使用数据库的几点说明:

      • 您不应该使用 mysql_* 函数,因为它们已被弃用。我建议使用mysqliPDO
      • 您的函数不能保证您确实有一个在您的函数范围内可用的数据库连接。您可以考虑将资源句柄传递给该函数的数据库连接,然后在查询函数调用中引用该句柄。

      【讨论】:

      • 你是对的。但似乎带有数组的查询下的代码不起作用......知道吗?因为当我将其更改为仅获得一行结果时,它正在工作......
      • @DehMotth json_encode() 应该机器人给你无效的 JSON 格式。在我看来,您只需调试代码即可找出您的方法未能按预期运行的地方。换句话说,您需要定义“不工作”的含义。为什么它不起作用?您在代码中的哪个位置获得了您不期望的变量值?
      • 您的查询结果中有多少列?由于您使用的是select *,所以它可能会波动,所以我会避免这种情况!您的结果的第一列也是独一无二的吗?它应该是唯一的,因为它可能会成为 json 的键,因此请在查询中使用它...类似于select COL1, COL2.... group by COL1。您也可以只分配$response['messages'] = $db->loadData($id) 并跳过额外的数组操作,这在其他条件不变的情况下总是一件好事
      猜你喜欢
      • 2011-04-03
      • 2011-06-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 2012-09-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多