2012-03-10 2 views
0

내 코드에 약간의 실수가있어 MySQL 데이터베이스에 두 개의 레코드를 추가하려고하면 둘 다 추가되지만 순간에는 두 번째 레코드 만 추가됩니다. 입력해야합니다. 그래서 예를 들어 두 개의 RefTitle 필드, 두 개의 RefSurname 필드 등이 있습니다! 일부 PHP 코드 :여러 레코드가 PHP 폼에서 MySql에 삽입

<?php 
if(empty($err)) { 
for($i = 0; $i < 2; $i++) 
{ 
$RefTitle = $_POST['RefTitle'][$i]; 
$RefSurname = $_POST['RefSurname'][$i]; 
$RefForenames = $_POST['RefForenames'][$i]; 
$RefInstitute = $_POST['RefInstitute'][$i]; 
$RefEmail = $_POST['RefEmail'][$i]; 
$RefTelephone = $_POST['RefTelephone'][$i]; 
$EmailOK = $_POST['EmailOK'][$i]; 

$sql_insert = "INSERT into `referees` 
(`RefTitle`,`RefSurname`,`RefForenames`,`RefInstitute`, `RefEmail`,  
`RefTelephone`,`EmailOK`) 
VALUES 

('$RefTitle','$RefSurname','$RefForenames','$RefInstitute','$RefEmail',  
'$RefTelephone','$EmailOK' 
) 
"; ?> 

는 내가 가지고있는 [] 내 HTML 형태로 각각의 이름 필드 후. 감사합니다.

+0

mysql_query를 실행하는 곳 – xbonez

+0

mysql_query()를 어디에서 호출하고 있습니까? 루프 내부 또는 외부? 또한 SQL 인젝션에 취약합니다. mysql_real_escape_string()을 사용하여 모든'$ _POST' vars를 이스케이프 처리합니다. –

+0

감사합니다. – user1257518

답변

0

여기 제가 생각한 바가 있습니다.

루프에서 현재 쿼리를 문자열에 추가하여 이전 쿼리를 덮어 씁니다. 루프가 끝난 후 mysql_query을 실행하지만 루프에 의해 생성 된 마지막 쿼리에서만 실행됩니다.

  1. 모든 반복에 루프 내에서 쿼리를 실행합니다

    당신은이 문제를 해결하는 두 가지 방법이있다. 의사 코드 :

    ($ i = 1 - 100) {
    $ query = // 쿼리 작성;

    mysql_query ($ query);

    은}

  2. 또는 (그리고 더 좋은 방법)은 INSERT 문에 값 목록을 사용하는 것입니다.

값의 목록을 가진 삽입 그래서이

INSERT INTO table VALUES (1,2,3), (4,5,6), (7,8,9) 

, (다시 의사 코드)처럼 보이는

$query = "INSERT INTO table VALUES "; 
for ($i = 1 to 100) 
{ 
    $query .= " ("; 
    $query .= "" //comma seperate the values of the current iteration 
    $query .= "),"; 
} 

// 루프 종료 후, 후행 관계없는 쉼표를 제거

// 전체 쿼리를 한 번에 실행

mysql_query($query); 
+0

외부에서 실행했습니다. 동일한 테이블에 대해 더 많은 레코드를 하나의 명령문에 삽입 할 수 있습니다. 더 효율적입니다 : INSERT INTO tbl_name (a, b, c) VALUES (1,2,3), (4,5,6), (7,8,9); – Roger