오늘 Android Studio 기반 어플을 테스트 하는데 PHP Array 를 잘못 구현해서 삽질을 한참 했다.
// 사무실번호, 휴대폰번호, 이름, 소속 등의 정보를 추출 $sql = "select userNM,mobileNO,telNO,sosok from Person "; $sql .= "where mobileNO='".$search."'";
$R = array(); // 결과 담을 변수 생성 $result = mysqli_query($dbconn,$sql); while($row = mysqli_fetch_object($result)) { array_push($R, $row); } echo json_encode(array("result"=>$R)); |
모든 정보를 select 문으로 가져와서 array_push 에 담은 경우에는 아무런 문제가 되지 않는다.
그런데 sosok 정보를 서브 쿼리로도 가져오기가 힘든 경우가 생겼다.
그래서 함수를 만들어서 해당 정보를 가져와서 array_push 에 저장할 때 아무 생각없이 코딩을 했더니 원하는 결과가 나오지 않고 엉뚱한 결과가 나온다.
$search = add_hyphen_telNo($search); $sosok = Phone2Dept($search);
// 사무실번호, 휴대폰번호, 이름, 소속 등의 정보를 추출 $sql = "select userNM,mobileNO,telNO from SYS_MEMBER "; $sql.= "where mobileNO='".$search."' or telNO='".$search."' ";
$R = array(); // 결과 담을 변수 생성 $result = mysqli_query($dbconn,$sql); while($row = mysqli_fetch_object($result)) { array_push($R, $row); array_push($R, array("sosok"=>$sosok)); }
echo json_encode(array("result"=>$R)); |
잘못된 결과가 나온다.
아래와 같이 풀어서 해결했다. 풀어서 array_push 에 담으면 암호화된 코드를 추가하기도 편하다.
$sosok = Phone2Dept($search);
// 사무실번호, 휴대폰번호, 이름, 소속 등의 정보를 추출 $sql = "select userNM,mobileNO,telNO from SYS_MEMBER "; $sql.= "where mobileNO='".$search."' or telNO='".$search."' ";
$R = array(); // 결과 담을 변수 생성 $result = mysqli_query($dbconn,$sql); while($row = mysqli_fetch_array($result)) { array_push($R, array("userNM"=>$row[0],"mobileNO"=>$row[1],"telNO"=>$row[2],"sosok"=>$sosok)); } echo json_encode(array("result"=>$R));
|
select 문 하나로 해결이 안되는 걸 json 방식으로 안드로이드폰과 통신하려면 위와 같은 방법으로 데이터를 추가하면 해결될 수 있다.
참고 : How to Use JSON Data with PHP or JavaScript
https://www.taniarascia.com/how-to-use-json-data-with-php-or-javascript/
Android 코드에서는
int responseCode = conn.getResponseCode();
//System.out.println("GET Response Code : " + responseCode);
if(responseCode == HttpURLConnection.HTTP_OK){ // 연결 코드가 리턴되면
bufferedReader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String json;
while((json = bufferedReader.readLine())!= null){
sb.append(json + "\n");
}
}
bufferedReader.close();
}
System.out.println("PHP Comm Out : " + sb.toString());
로 로그 결과를 확인해서 보낸 데이터가 원하는 형태로 넘어오는지 확인을 꼭 하는게 좋다.