2017-11-05 6 views
-1

제가 선택 쿼리에서 WHERE를 사용하면 문제가 있습니다. DB 테이블에는 "1,2,3"과 같이 쉼표로 나눈 데이터를 저장하는 필드가 들어 있습니다. 필드에 1,2,3이 있는지 확인하는 방법을 모릅니다. 일반적인 쿼리는 "SELECT * FROM"입니다. $ table. "WHERE name = '". $ val. "'". 하지만 물론 이것은 $ val과 같은 항목 만 찾습니다. 따라서 "1"을 검색하면 "1,2,3"또는 "1,2"가 아닌 "1"만 포함하는 항목 만 제공합니다. 그렇게 할 수있는 방법이 있습니까?mysql 복수의 값이 있습니다

감사합니다.

+0

** 경고 ** : 이것은 몇 가지 심각한 [SQL 주입 버그]이 (http://bobby-tables.com/) 사용자 데이터를 쿼리 내에서 사용되기 때문이다. 가능하면 ** prepared statements **를 사용하십시오. 이것들은 [mysqli] (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)와 [PDO] (http://php.net/manual/)에서 매우 간단합니다. en/pdo.prepared-statements.php) 어디에서 사용자가 제공 한 데이터는 나중에 사용되는 것에 따라'bind_param' 또는'execute'를 사용하여 채워지는'?'또는': name' 지시자로 지정됩니다. **'$ _POST','$ _GET' 또는 다른 사용자 데이터를 쿼리에 직접 입력하지 마십시오. – tadman

답변

4

데이터 구조를 수정해야합니다. 숫자 목록을 문자열로 저장하는 것을 피하는 데는 여러 가지 이유가 있습니다.

  • 값은 올바른 데이터 유형으로 저장해야합니다. 숫자는 문자열이 아닙니다.
  • SQL의 문자열 처리 기능이 매우 좋지 않습니다.
  • SQL에는 목록을 저장하기위한 위대한 데이터 구조가 있습니다. 이것을 테이블이라 부릅니다.
  • 숫자가 다른 테이블을 참조하는 경우 적절한 외래 키 관계를 선언 할 수 없습니다.

가끔씩 우리는 다른 사람들의 디자인에 대한 잘못된 결정에 때맞 춥니 다. 이러한 경우, MySQL은 find_in_set() 제공 :

where find_in_set(1, name) > 0