엔드포인트에 POST 요청을 보내려고 했는데 200 응답을 받았는데 보낸 데이터가 데이터베이스에 잘못 저장되었습니다.
내 게시물 요청에 문제가 있는지 아니면 요청을 처리하는 백엔드 코드에 문제가 있는지 알고 싶습니다.
더 구체적으로 말하면: Laravel + MariaDB 백엔드에 POST 요청을 보냅니다. 나는 백엔드 코드를 작성하지 않았으며 내가 얻은 모든 "세부 사항"은 다음과 같습니다.
게시물 요청에는 3개의 필드가 있습니다:
- user_id: 환자 ID
- 비밀번호: 환자 비밀번호(모든 환자에게 동일)
- 페이로드: 다음 구조의 json 페이로드:
- 'epoch_start' => '필수|수',
- 'epoch_end' => '필수|숫자|gte:epoch_start',
- '크기' => '필수|수|gt:0',
- '온도' => '필수|배열|최소: 크기',
- '압력' => '필수|배열|최소: 크기',
- '이동' => '필수|배열|최소:크기',
요청을 처리하는 컨트롤러는 다음과 같습니다.
으아아아Postman을 사용하여 이 Post 요청을 시도하면(curl 및 Python의 요청 모듈도 사용해 보았습니다) 200 응답을 받고 데이터가 이런 방식으로 데이터베이스에 저장됩니다.
문제는 "온도", "압력" 및 "동작" 필드, 특히 배열 주위의 큰따옴표에 있습니다. 이 데이터와 관련된 웹 애플리케이션에서 수행한 계산은 모두 잘못되었습니다. 그러나 이중 인용문을 수동으로 제거하면 PhpMyAdmin에서 인용하면 계산이 정확합니다.
완전성을 위해 테이블 구조는 다음과 같습니다.
이 필드 주위에 큰따옴표를 피할 수 있는 방법이 있나요?
POST 요청에 문제가 있나요, 아니면 백엔드 관련 문제인가요?
저는 PHP에 익숙하지 않지만, 제 기억이 맞다면 이 데이터의 처리는 다음 줄로 관리되어야 합니다:
으아아아그리고 json_encode는 문자열을 반환하므로 여기서 백엔드 코드에 문제가 있다는 생각이 들기 시작했지만 다른 의견을 듣고 싶습니다.
미리 감사드립니다
EDIT: 좋습니다. @samuel-olufemi의 답변과 @sumit의 의견 덕분에 MariaDB에서 사용하는 긴 텍스트 데이터 유형과 결합된 json_encode가 주요 문제라는 결론을 내릴 수 있습니다. 그래서 배열 값을 인코딩하지 않고 저장하려고 했고, 다음 3줄을 다음과 같이 변경했습니다.
으아아아그리고 내 희망대로 데이터는 큰따옴표 없이 저장됩니다. 모두의 도움과 시간에 감사드립니다.
구현이 정확합니다. 이 문제는 Maria DB 긴 텍스트 데이터 유형이 JSON 데이터를 관리하는 방식으로 인해 발생합니다.
이 답변을 확인하실 수 있습니다
https://dba.stackexchange .com/questions/192754/json-functions-double-quotes-add-when-going-through-a-variable