Android / PHP / MySQL查询json_encode的结果



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

这是调用执行查询的函数(在 loadData.php 中)db_function.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);;
$result = $db -> loadData($id);

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

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

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

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

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

最后,关于如何使用数据库的一些说明:

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

最新更新