2010-05-08 2 views
3

iam은배열을 데이터베이스 테이블에 단일 쿼리로 삽입

과 같은 배열을 가지고 있습니다.

[item1, itmem2, item3];

나는 특정 userId를 이들 항목을 삽입해야 :

최종 결과

2 || item1 
2 || item2 
2 || item3 

은 PHP 코드의 배열을 통해 루핑 각 항목을 삽입 IAM 항목 Id이

사용자 아이디처럼 예 :

foreach($items as $item) 
{ 
insert into items (UserId,ItemId) value (2,$item); 
} 

모든 쿼리를 단일 쿼리에 삽입 할 수 있습니다.

+1

, 당신이 적절하게 인용해야합니다 SQL 주입. 다행히도 이것은 새로운 것이 아닙니다. – outis

+0

@outis 고맙습니다.하지만 저는 이미 그것을 돌봐 줬습니다 !! –

답변

1

당신과 같이 쿼리를 구축 미리 수 있습니다 : 당신이 세미콜론으로 각각을 분리하는 경우

$query = ""; 
foreach($items as $item) 
{ 
    $query .= "insert into items (UserId,ItemId) value (2,$item);"; 
} 

대부분의 데이터베이스는 여러 명령을 실행 할 수 있습니다.

6

예, 쿼리는 다음과 같이 수 :

INSERT INTO items (UserId,ItemId) 
VALUES 
(2, 'item1'), 
(2, 'item2'), 
(2, 'item3'); 

당신은 PHP에서 해당 문자열을 구성 할 수 있습니다.

2
 
// Prepare the items to be inserted 
foreach($items as $item) 
{ 
    $sString .= '(2,' . $item.'),'; 
} 

// Remove the last char comma from the built string 
$sString = substr($sString,0,-1); 

$sqlQuery = "INSERT INTO items (UserId,ItemId) VALUES" . $sString; 
mysql_query($sqlQuery); 
2

내파이 최적입니다 ..

foreach($items as $item){ 
    $items[] = '(2,' . $item.')'; 
} 

$q = "INSERT INTO items (userID, itemID) VALUES " . implode(', ', $items); 
mysql_query($q); 

참조 - 배열 값은 사용자의 입력에서 오는 경우 스크립트가 취약하지 않도록 http://php.net/manual/en/function.implode.php