2012-04-09 2 views
0

ID 배열이 $friends = array(0001, 0002, 0003, 0004)이고 데이터베이스가 table_name = friends, column_header = fid 인 데이터베이스가 있습니다. 에 friends은 친구 ID 중 하나를 포함 할 수도 있고 포함하지 않을 수도 있습니다. 쿼리에 $friends을 입력하고 $friendsfid에있는 현재 값을 모두 반환합니다.PDO를 사용하여 SQL 데이터베이스에서 배열 값 일치 (PHP)

나는 fid={array_values($friends)} 잘못된 확신 해요,하지만 난 WHERE 부분을 값의 배열을 전달하는 방법을 모른다 ...

//All DB_X's are defined in another file that is included in this actual file 
$db = new PDO("mysql:host=".DB_SERVER.";dbname=".DB_NAME, DB_USER, DB_PASS); 
$stmt = $db->prepare("SELECT fid FROM friends WHERE fid={array_values($friends)} ORDER BY fid ASC"); 
$stmt->execute(); 

$friendResults = $stmt->fetchAll(); 

답변

1

당신은 SQL의 IN 연산자의 사용을해야합니다 :

SELECT ... FROM ... WHERE foo IN (val1, val2, ...) 
당신이 원하는 SQL 비트 얻기 위해 PHP의 implode() 기능을 사용할 수 있습니다

:

$values = implode(', ', array_values($friends)); 
$query = "SELECT ... FROM ... WHERE fid IN ({$values})"; 

값이 숫자 인 경우 위 내용이 작동합니다. 그들은 문자열이 있다면, 당신은 implode() ING 전에 값을 수정해야합니다 :

$values = array_map(array_values($friends), function($value) { 
    return "'{$value}'"; // Here is where you could do sanitization 
}); 
$values = implode(', ', $values); 

참고 사항 : 당신은 SQL 주입을 방지하기 위해 $friends의 데이터를 제대로 살균해야합니다.

관련 문제