如何添加"错误代码"造成?

时间:2014-08-28 20:54:52

标签: php android mysql json error-handling

我知道如何通过JSON从MySQL数据库到我的Android-App获取值,单行或多行。但是如何在结果中添加一个值,告诉我查询是否正常,而不是,添加错误代码之类的东西?

这是我的代码: PHP

$result = mysqli_query($con,"SELECT Role, age FROM table1");
$json = array();
while($row = mysqli_fetch_array($result)){
    $json[] = $row;
}
mysqli_close($con);
print json_encode($json);

的Android

        try{
            JSONArray jArray = new JSONArray(result);
            for(int i=0;i<jArray.length();i++){
               JSONObject json_data = jArray.getJSONObject(i);
               Log.i("log_tag","age: " + json_data.getString("age") +
                              ", role: "+json_data.getString("Role"));
            }
        }
        catch(JSONException e){
                Log.e("log_tag", "Error parsing data "+e.toString());
        }

现在,例如,如果数据库中没有任何用户,则查询不成功。 在这种情况下,我想得到一个错误,错误的东西,如错误代码,告诉我,实际上是什么错误。否则我得到一个&#34; OK-Message&#34;结果。 我怎么能这样做?

我知道这个例子我可以通过计算Android应用程序中的值来做到这一点,但我需要更复杂的东西,比如注册表单中的错误。

我希望你明白我的意思:) 谢谢!

2 个答案:

答案 0 :(得分:1)

首先定义JSON架构/结构 - 这是API的一部分,合同记录。在此之后,大多数事情都将“适应”,并成为基本编程的练习。

例如,请考虑此合同定义;

{
   status:         - string of "success" or "fail"
   errorMessage:   - optional, an error message
   results: [..]   - array of results (always empty on non-OK status), where
                   -   each result is an array of the form [role, age]
}

然后创建JSON结果 fit 合同;

$result = mysqli_query($con,"SELECT Role, age FROM table1");

$resp = array();
if ($result) {
  // Good, also add results
  $resp["status"] = "success";

  $results = array();
  while($row = mysqli_fetch_array($result)){
    $results[] = $row;
  }
  $resp["results"] = $results;
} else {
  // No good!
  $resp["status"] = "fail";

  $resp["errorMessage"] = "Database query failed";
  // Or if this is desired to be exposed (only for development!)
  // $resp["errorMessage"] = mysqli_error($con);

  // No results, but keep empty JSON array to make JSON access more consistent
  $resp["results"] = array();       
}
mysqli_close($con);

print json_encode($resp);

然后更新Android客户端以接受这个新的JSON结构。需要调整它以包含一个额外的级别,首先检查status(它是“成功”吗?)。如果没问题,请使用results数组。如果不显示errorMessage或以其他方式通知用户该问题。另请注意,即使未返回任何结果,查询也可能是“成功”。

时间应抛出异常,如果JSON 错误处理 - 其他所有内容都应通过适当的值检查和条件处理。

答案 1 :(得分:0)

try ... catch块可以很好地解决这个问题。

http://php.net/manual/en/internals2.opcodes.catch.php