2014-11-10 3 views
0

데이터베이스에서 데이터를 검색하기 위해 GET 메서드를 사용하여 배열 값을 검색하는 방법은 무엇입니까?PHP에서 데이터베이스에 배열로 저장된 값을 검색하는 방법

다른 말로하면, 나는 (prof_ids)과 같은 데이터베이스에 저장되어 있습니다 : 1, 15, 52,이 세 값은 모두 하나의 필드에 저장됩니다. 예를 들어 (?prof_id=1)을 포함하는 링크가 있는데 값이 (prof_ids) 필드에 있는지 검색 할 검색어를 원합니다. 나는 그것을 할 수있는 아이디어가 없습니다.

가능합니까? 하나는 당신이 좀 도와주십시오 수있는 다른 솔루션을하십시오

$sql = $mysqli->query("SELECT * FROM profs WHERE prof_ids LIKE '%".$_GET[prof_id'']."%' "); 

나는 확실히 내 쿼리는 나에게 내가 찾고 결과를 얻을 수 없습니다 ..

+0

추천 검색어를 사용해 보셨습니까? – Steve

+0

예, 작동했지만 작동하지 않습니다. – Devstar

+1

GET 매개 변수가 정확히 1, 15, 52 (예 : 귀하의 예와 같습니다) 일 경우 요청한 결과가 나타납니다. 그러나 보안상의 이유로 GET 매개 변수 자체를 사용해서는 안됩니다. GET 매개 변수의 유효성을 확인한 다음 준비된 문을 사용하여 쿼리에 삽입하십시오. 문제를 깨끗하게 해결하려면 데이터베이스를 표준화해야합니다. ID를 실제로 저장하는 것은 권장되지 않습니다. ID를 저장하려면 다 대다 (n : m) 관계 또는 일대 다 (1 : m) 관계를 사용하십시오. – Marcel

답변

1

문제를 사용하여 그 일을 함께 LIKE (SQL injection은 별개로) 원하지 않는 모든 종류의 레코드를 얻을 수 있습니다. 1을 전달하면 1, 10, 14, 100, 21 등이 일치합니다.

이 때문에 개별 레코드의 데이터가 포함 된 일대 다 테이블이 필요하므로 정확하게 기록하십시오. 더 많은 공간이 필요하지만 매번 원하는 레코드를 얻을 수있는 유일한 방법입니다.

SELECT table1.column 
FROM table1 
     INNER JOIN table2 ON table1.id = table2.id 
WHERE table2.record = "1" 
0

당신은 당신이 열에서 3 개 ID를 넣어 때문에 그래서 조건이

"SELECT * FROM profs WHERE prof_ids REGEXP '[[:<:]]".$_GET['prof_id']."[[:>:]]' " 
0

처럼 보일 것 대신 LIKE 의 RLIKE를 시도 할 수 있습니다, 일반 매칭을 수행하기 어렵다.

그러나 패턴처럼 항상 경우 (int, int, int)를

, 당신은 같은 정규 표현식을 사용하여 고려할 수 있습니다 :이 한 쿼리에서 수행되고 있다고 생각

$param = $_GET['prof_id']; 

//getting the records where the id in first position 
$sql = $mysqli->query("SELECT * FROM profs WHERE prof_ids REGEXP param .',[0-9]*,[0-9]*'"); 

//getting the records where the id in second position 
$sql2 = $mysqli->query("SELECT * FROM profs WHERE prof_ids REGEXP '[0-9]*,'.param .',[0-9]*'"); 

//getting the records where the id in third position 
$sql3 = $mysqli->query("SELECT * FROM profs WHERE prof_ids REGEXP ',[0-9]*,[0-9]*'.param"); 

하지만 내가 할 수있는 모든 것입니다 에 대해 생각하다.

관련 문제