查询json_encode的Android / PHP / MySQL结果

时间:2014-02-12 15:28:28

标签: php mysql

我在从本地服务器获取数据到Android应用程序时遇到一些问题。 架构:Android - PHP /查询 - 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);;

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:2)

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

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

现在我注意到你的函数中绝对没有错误处理或边缘案例处理(如果出现错误你就会死掉)。如果查询失败,您应该返回呼叫客户端?如果没有找到消息,你会怎么做?

最后,有几个关于你如何使用数据库的注意事项:

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