마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

php와 mysql연동에서 select문 where절 파라미터 bind 가능 한건가요

0 추천

select.php

 $con = mysqli_connect(db연결);

      mysqli_query($con, "set names utf8");

    $query = "SELECT * FROM worklog order by workDate asc";

    $res = mysqli_query($con,$query);

    $rowCnt= mysqli_num_rows($res);

    $result = array();

    for($i=0;$i<$rowCnt;$i++){

        $row= mysqli_fetch_array($res, MYSQLI_ASSOC);

        //각 각의 row를 $arr에 추가

        $result[$i]= $row;

    }

$jsonData=json_encode($result);

echo "$jsonData";

mysqli_close($con);

보이는 php 파일로 안드로이드 스튜디오에서 연동하여 php파일로 select * from worklog [정렬]; 을 하여 데이터를 모두 가져왔습니다.

지금 로그인 기능을 합쳤는데 사용자에 따라 등록한 글만을 가져와야 하므로 

select * from worklog where worker=? 로 수정 후 ? 에 해당하는 데이터를 바인드하여 worker(사용자)에 따른 데이터만 가져오고 싶습니다. 

-----------안드로이드 스튜디오 내 연동 코드 -----------------------

public void clickLoad(View view){
        // 서버의 php 파일에서 DB 데이터 받기
        // Volley 라이브러리 사용
        //서버 URL
        String URL = "서버URL";
// worker라는 변수(사용자)를 get하여 저장
        String worker = tv_name.getText().toString().trim();
        // 결과 : JsonArray
        JsonArrayRequest jsonArrayRequest= new JsonArrayRequest(Request.Method.POST, URL,null, new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray response) {
                
                data.clear();
                nAdapter.notifyDataSetChanged();
                try {
                    for(int i=0;i<response.length();i++){
                        JSONObject jsonObject= response.getJSONObject(i);
                        String workDate = jsonObject.getString("workDate");
                        String workType = jsonObject.getString("workType");
                        String workSpace = onObject.getString("workSpace");
                        String memo = jsonObject.getString("memo");
                        String worker = jsonObject.getString("worker");

                        items.add(0,new Data(workDate,workType, workSpace, memo, worker)); // 첫 번째 매개변수는 몇번째에 추가 될지, 제일 위에 오도록
                        nAdapter.notifyItemInserted(0);
                    }
//                    Toast.makeText(MainActivity.this, String.valueOf(response.length()-1), Toast.LENGTH_SHORT).show();
                    if(response.length() == 0){
                        Toast.makeText(MainActivity.this, "근무표를 등록해주세요", Toast.LENGTH_SHORT).show();
                    }else{
                        forMake(response.length()-1);
                    }

//                    Toast.makeText(MainActivity.this, items.get(0).getWorkDate() , Toast.LENGTH_SHORT).show();
                } catch (JSONException e) {e.printStackTrace();}
            }

        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Toast.makeText(MainActivity.this, "ERROR", Toast.LENGTH_SHORT).show();
            }
        });
        //실제 요청 작업을 수행해주는 요청큐 객체 생성
        RequestQueue requestQueue= Volley.newRequestQueue(this);
        //요청큐에 요청 객체 생성
        requestQueue.add(jsonArrayRequest);
    }

php 코드에서 $worker = $_POST["worker"]; 를 추가하고 위 코드에서 String worker로 저장된 사용자 이름을 넘겨주면 될것 같은데 그 방법을 몰라서 몇시간에 삽질중입니다. 

제가 접근 방법이 틀린건가요..? 도움 요청 드립니다.

JSONArrayRequest를 사용하는데 woker라는 String 변수의 값을 php로 넘기고 php에서 받아서 사용하는 방법을 모르겠습니다.

사자의사자 (200 포인트) 님이 2023년 7월 21일 질문

1개의 답변

0 추천

JSON을 이용해서 POST로 요청을 보낼 때는 request boy를 이용하시면 됩니다. 제가 Volley는 사용하지 않기 때문에 정확한 것은 모르겠으나 JSONArrayRequst를 찾아보면  아래의 메소드 중 하나를 override 하시면 될 것 같아 보이네요. 테스트해 보세요.

@Override
    protected Map<String, String> getParams() {
        // Add parameters in the request body
        Map<String, String> params = new HashMap<>();
        params.put("param1", "value1");
        params.put("param2", "value2");
        return params;
    }
@Override
public byte[] getBody() {
   JSONObject jsonObject = new JSONObject();
   try {
        jsonObject.put("param1", "value1");
        jsonObject.put("param2", "value2");
    } catch (JSONException e) {
       e.printStackTrace();
   }

    // Convert the JSON object to byte array
    byte[] requestBody = jsonObject.toString().getBytes();
    return requestBody;
}


spark (227,530 포인트) 님이 2023년 7월 22일 답변
JSONArrayRequst의 생성자에도 원하는 요청값을 설정할 수 있습니다.
그 요청값을 혹시 JsonArray형태로 보내야 하나요?
그냥 JSON Object로 보내시면 될 것 같은데요. 님이 서버에서 어떻게 처리하고 있는지만 확인하시면 어떤 형태로 요청을 올릴지 정해집니다. JSON의 포맷 구조를 참조하세요. 헷갈리시면 Postman같은 툴로 먼저 테스트해 보세요.
...