2010-06-02 5 views
-1

사용자의 입력을 기반으로 동적으로 핀을 생성하여 mySql 데이터베이스에 저장하는 응용 프로그램을 만들고 있습니다.mysql에서 동적으로 SQL 삽입 쿼리를 생성하는 방법

$sql = "INSERT INTO tblpin ('pinId', 'ownerId', 'usedby', 'status') 
    VALUES 
     for($i=0;$i<$npin;$i++) 
     { 
      ('$pin[$i]','$ownerid', 'Free', '1'); 
     } 
    ;"; 

어떻게하면됩니까?

+1

** 코드 **와 ** 데이터 ** –

+1

@Col. Shrapnel : 좋아. 그래서, 예를 들어 줄 수 있습니까? – cherouvim

+0

당신은 PHP없이 일반 쿼리를 수동으로 작성할 수 있습니까? 그래서 - 그런 다음 sql 문자열을 상수 및 반복 부분으로 분리하십시오. 이후 반복되는 부분을 루프로 대체하고 PHP로 구성하십시오. – zerkms

답변

-1

뭔가 (분명한 컴파일러에 대한 편집)

$sql = sprintf("INSERT INTO `tblpin` (`pinId`, `ownerId`, `usedby`, `status`) VALUES ('%s', '%s', '%s', '%s')", 
    generatePIN($pin), 
    mysql_real_escape_string($ownerId), 
    mysql_real_escape_string($usedBy), 
    mysql_real_escape_string($status)); 

또는 generatePIN이 ​​기능을 기반으로 핀을 만드는 것입니다

$pins = generatePINS($user); // ? however they're generated 
foreach($pins as $pin) { 
    $sql = sprintf("INSERT INTO `tblpin` (`pinId`, `ownerId`, `usedby`, `status`) VALUES ('%s', '%s', '%s', '%s')", 
     $pin, 
     mysql_real_escape_string($ownerId), 
     mysql_real_escape_string($usedBy), 
     mysql_real_escape_string($status)); 
     $result = mysql_query($sql); 
} 

같은 당신이 무엇을 떨어져 그것을 내놓고있어 도대체. 또는 generatePINS 그들

+0

그래서 두 가지 : (1) 한 번에 여러 행의 삽입을하려고합니다. 단일 SQL 문으로 당신의 해결책은 그렇게하지 않는다고 생각하지 않습니다. (2) 모든 질문에 대한 답변은 SQL 주입 공격에 대한 질문자의 코드가 익숙하다는 것을 알아야합니다. (제안 된 솔루션에는 이와 동일한 결함이 있습니다.) –

+0

OP는 여러 행의 메모를 작성하지 않습니다. 문제는 모호합니다. 핀은 오타가 될 수 있습니다. 그/그녀가 자신의 데이터를 위생 처리하는지 아닌지에 대해서는 OP가 언급하지 않습니다. OP가이 사이트의 모든 re : sql을 수행하는 경우, 그/그녀는 많은 예제 (지옥, 심지어 그/그녀를위한 팁으로 나의 답변 중 일부)를 찾을 수 있습니다. –

1

의 배열이 시도 반환 : 물론

$sql = "INSERT INTO tblpin ('pinId', 'ownerId', 'usedby', 'status') VALUES "; 
for($i=0; $i<sizeof($pin); $i++) { 
    if ($i>0) 
     $sql .= ", "; 
    $sql .= "('$pin[$i]', '$ownerid', 'Free', '1')"; 
} 

당신은 그들이 어떤 could mess with the SQL query 모든 문자를 포함 할 경우 $ 핀의 값을 탈출해야합니다.

+1

PHP의 문자열은 "." 및 ";" mysql_query()에 대한 질의의 끝에서 하나의 질의만을 허용하기 때문에 잘못된 char이다. 그리고 최신 :'foreach'는이 경우 더 편리합니다. 감사합니다 zerkms – zerkms

+0

. 5 년이 지났습니다 ... – cherouvim

+0

'echo $ sql;은'0'을 표시하고 있습니다. – nectar

1
$s = $pdo->prepare("INSERT INTO xy (a,b,c,d) VALUES (?,?,?,?)"); 
foreach ($pins as $i) { 
    $s->execute($i,$ownerID,"free",1); 
} 
+0

일부 성능상의 이유로 OP에서 대량 삽입이 사용되지만이 방법도 사용할 수 있습니다. – zerkms

관련 문제