"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 숫자가 아닌 데이터에 대해 \"Field = 0\"을 쿼리할 때 MySQL이 모든 행을 반환하는 이유는 무엇입니까?

숫자가 아닌 데이터에 대해 \"Field = 0\"을 쿼리할 때 MySQL이 모든 행을 반환하는 이유는 무엇입니까?

2024-11-05에 게시됨
검색:788

Why Does MySQL Return All Rows When Querying \

모호한 쿼리: MySQL이 "Field=0"에 대해 모든 행을 반환하는 이유 이해

MySQL 쿼리 영역에서는 겉으로는 무해해 보이는 비교가 , "SELECT * FROM table WHERE email=0"과 같은 작업을 수행하면 예기치 않은 결과가 발생할 수 있습니다. 의도한 대로 특정 행을 필터링하는 대신 테이블의 모든 레코드를 반환하므로 데이터 보안 및 쿼리 무결성에 대한 우려가 높아집니다.

이 복잡한 동작을 이해하려면 데이터 유형의 미묘함을 탐구해야 합니다. 이 경우 이메일 주소와 같이 숫자가 아닌 데이터가 포함된 필드를 쿼리할 때 MySQL은 이를 숫자 값으로 변환하려고 시도합니다. "0"은 유효한 이메일이 아니기 때문에 MySQL은 이를 숫자 0으로 해석하여 비교 조건을 효과적으로 무효화합니다.

결과적으로 쿼리 SELECT * FROM table WHERE email=0은 본질적으로 필터링 기준이 없는 쿼리가 됩니다. , 결과적으로 모든 행이 검색됩니다. 권한이 없는 개인이 이 취약점을 악용하여 민감한 데이터에 액세스할 수 있으므로 이는 보안에 심각한 영향을 미칠 수 있습니다.

다행히도 이러한 모호성을 피할 수 있는 간단한 솔루션이 있습니다. "0" 값을 작은따옴표로 묶어 문자열로 처리해야 함을 명시적으로 지정하여 적절한 비교를 보장합니다.

SELECT * FROM table WHERE email='0';

이 수정을 통해 MySQL은 값을 문자열로 정확하게 비교하고 이메일 값이 "0"인 행만 반환합니다.

향후 이러한 불일치를 방지하려면 다음 사항에 세심한 주의를 기울이는 것이 중요합니다. 쿼리와 관련된 데이터 유형입니다. 항상 문자열 필드가 문자열 값과 비교되고 숫자 필드가 숫자 값과 비교되는지 확인하십시오. 이 간단한 예방 조치는 원치 않는 놀라움을 방지하고 데이터베이스 상호 작용의 정확성을 보장합니다.

릴리스 선언문 이 글은 1729730570에서 재인쇄되었습니다. 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3