2012-03-10 149 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 2012-03-10 17:24:09

+0

你在哪裏調用'mysql_query()'?在循環或外部?而且,這很容易受到SQL注入的影響。用'mysql_real_escape_string()' – 2012-03-10 17:25:51

+0

轉義所有'$ _POST'變種謝謝你們,我在外面跑 – user1257518 2012-03-10 17:39:45

回答

0

這是我認爲正在發生的事情。

在循環中,您將當前查詢添加到字符串,覆蓋以前的查詢。循環結束後,您運行mysql_query,但這隻會在循環生成的最後一個查詢上運行。

您有兩種方法來解決這個問題:

  1. 在每次迭代循環中執行查詢。僞代碼:

    for($ i = 1 to 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 2012-03-10 19:57:10