2012-03-10 12 views
0

は、私は私のコードで小さなミスを持っていると思うので、私はそれが彼らの両方が追加されますが、現時点ではそのだけ二行を追加し、MySQLデータベースには2件のレコードを追加しようとすると、その入力する必要があります。私は2つのRefTitleフィールド、2つのRefSurnameフィールドなどを持っています。 いくつかのPHPコード:複数のレコードが

<?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を呼び出しているmysql_query' – xbonez

+0

を実行していますか?ループの内側か外側か?また、これはSQLインジェクションに対して脆弱です。 mysql_real_escape_string()ですべての '$ _POST'変数をエスケープしてください –

+0

ありがとうございました。 – user1257518

答えて

0

はここで何が起こっているかと思います。ループでは

、あなたは前のクエリを上書きし、文字列に現在のクエリを追加しています。ループが終了したら、mysql_queryを実行しますが、これは唯一のループによって生成された最後のクエリ上で実行されます。

  1. が反復ごとにループ内のクエリを実行します。

    あなたはこれを修正するには、2つの方法があります。擬似コード:

    for($ i = 1〜100) {
    $ query = //クエリを作成します。

    するmysql_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

の外で実行していました。同じテーブルのレコードを1つのステートメントに挿入できます。それはより効率的です:INSERT INTO tbl_name(a、b、c)VALUES(1,2,3)、(4,5,6)、(7,8,9); – Roger

関連する問題