2009-11-04 2 views
2

(My-) SQL에 준비된 문으로 여러 값을 선택하는 방법이 있습니까? 나는 IN-키워드 테이블에서 행의 몇 가지를 선택하기 위해 노력하고있어준비된 SQL 문과 함께 여러 값이 있습니까?

, 뭔가 같은 :

SELECT * 
    FROM table 
where id IN (1, 2, 3) 

는 "1, 2, 3은"명령문의 매개 변수로 전달되어야한다 . 이것은 PHP/PDO에서 가능합니까? 아니면 값을 concaterate하여 명세서에 직접 삽입해야합니까 (주입 때문에이 점에 대해 나쁜 인상을 받았습니다).

+0

나는 대답은 여기에 있다고 생각 : [stackoverflow.com/MySQL 가변 크기 변수 목록과 준비 문] (http://stackoverflow.com/questions/327274/mysql-prepared-statements-with-a-variable- size-variable-list) – manji

답변

1

, 당신은 array_fill로 자리 표시 자 목록을 작성 배열에 implode를 호출하여 "?, ?, ?, ..." 같은 문자열을 생성 할 수 있습니다. 또는 배열의 모든 항목이 정수 (예 : intval 사용)인지 확인하고 직접 쿼리를 작성하는 데 사용할 수 있습니다.

-1

aconcatenated 문자열의 목록을 통과 시도하고 이렇게 (매우 성능이 좋은하지 만 작동합니다 : 나는 곳이 기술을 사용 Spolsky 조엘의 응답을 본 것 같아요) :

SELECT * FROM table where concat('|',id,'|') like '%|1|2|3|%' 
+0

-1 ... 투표 할 생각이 듭니다. : ( –

+0

-1 끔찍한 생각입니다. Joel은 이것을 추천하지 않습니다. | 1 | 2 | 3 | 값이 동적 일 경우 어떻게합니까? –

+0

지금은 ' 그것을 발견했습니다 - 그는 그것을 위해 28 upvotes있어! http://stackoverflow.com/questions/337704/parameterizing-a-sql-in-clause/337817#337817 – davek

0

나는 통과 할 것을 정수형 배열로 작성한 다음 String.Join을 작성하여 준비된 명령문에서 함께 가져 오십시오. 정수에 아무것도 삽입 할 수 없습니다! 당신이 사용자로부터 온다 "무언가"의 배열이있는 경우

관련 문제