2009-03-01 9 views
0
$sql1 = "SELECT SIDno FROM class WHERE SubjID='$SubjName' and SecID='$SecName'"; 
$result1 = mysql_query($sql1); 
while ($row1 = mysql_fetch_assoc($result1)){ 
    $IDno = $row1["SIDno"]; 
    $sql2="INSERT INTO registered (ServiceID, IDno, Stype)VALUES('$RecCode','$IDno','$Stype')"; 
} 

これは私のコードです。その作業はしますが、データベースには1つのデータしか挿入されません。可能なすべてのデータをループから挿入するにはどうしたらいいですか?誰でも助けてくれますか?ループから値を挿入する

答えて

3

おそらく最後のレコードだけが挿入されるように、ループの後でクエリを実行している可能性があります。

ループの最後に挿入クエリを実行しよう:

while ($row1 = mysql_fetch_assoc($result1)) { 
    $IDno = $row1["SIDno"]; 
    $sql2 = "INSERT INTO registered (ServiceID, IDno, Stype) VALUES ('".mysql_real_escape_string($RecCode)."', '".mysql_real_escape_string($IDno)."', '".mysql_real_escape_string($Stype)."')"; 
    mysql_query($sql2); 
} 

それとも、最初にすべてのデータを収集し、すべてのレコードを挿入するために、1つのクエリを実行します。

$values = array(); 
while ($row1 = mysql_fetch_assoc($result1)) { 
    $IDno = $row1["SIDno"]; 
    $values[] = "('".mysql_real_escape_string($RecCode)."', '".mysql_real_escape_string($IDno)."', '".mysql_real_escape_string($Stype)."')"; 
} 
if (!empty($values)) { 
    $sql2 = "INSERT INTO registered (ServiceID, IDno, Stype) VALUES ".implode(',', $values); 
    mysql_query($sql2); 
} 

しかし、ドン」クエリの値を準備することを忘れないでください(mysql_real_escape_string function参照)。

+0

ニース破のアイデア。それを拡張して2D配列を作ることができませんでしたか? – strager

+0

@ Gumbo - 助けてくれてありがとう。その今働いている。 –

+0

@ stranger:なぜ2次元配列ですか?それだけですべてが複雑になるでしょう。 – Gumbo

-1

変更この行:これまで

$sql2="INSERT INTO registered..." 

:ループ内

$sql2 .= "INSERT INTO registered..." 

。あなたは間違ってinsert文を毎回上書きしています。 .=を使用すると、次のステートメントを前のステートメントに追加して、レコードごとに1つの挿入スクリプトを作成します。

+0

=文字列の連結には使用しないでください。 – grapefrukt

+0

@grapefrukt、Corrected。 – strager

+0

これは動作しません。 – Gumbo

1

注:変数をmysql_real_escape_stringでエスケープしていることを確認してください。

$sql1 = "SELECT SIDno FROM class WHERE SubjID='$SubjName' and SecID='$SecName'"; 
$result1 = mysql_query($sql1); 

$sql2 = "INSERT INTO registered (ServiceID, IDno, Stype) VALUES "; 

$addComma = false; 
while ($row1 = mysql_fetch_assoc($result1)){ 
    $IDno = $row1["SIDno"]; 
    $sql2 .= ($addComma ? ", " : "") . "('$RecCode','$IDno','$Stype')"; 
    $addComma = true; 
} 
3

あなたが取得したデータを使って何をやって滑走されていない場合は、INSERT ... SELECT ...ステートメントを使用することができます。

例:私の前に書かれた

INSERT INTO registered (ServiceID, IDno, Stype) 
SELECT field1, field2, field3 
FROM class 
WHERE SubjID='$SubjName' and SecID='$SecName'" 

など、あなたの変数をエスケープ...

関連する問題