从循环中插入值

时间:2009-03-01 16:58:47

标签: php

$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')";
}

这是我的代码。它的工作,但它只将一个数据插入数据库。如何从循环中插入所有可能的数据。任何人都可以帮助我吗?

4 个答案:

答案 0 :(得分: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);
}

或者您首先收集所有数据,然后执行一个查询以插入所有记录:

$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)。

答案 1 :(得分:3)

如果您不打算对获取的数据执行任何操作,可以使用INSERT .. SELECT ..语句。

示例:

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

就像在我面前写的那样,逃避你的变数......

答案 2 :(得分: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 :(得分:-1)

更改此行:

$sql2="INSERT INTO registered..."

到此:

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

循环内部。您每次都不小心覆盖了insert语句。如果您使用 .= ,则会将下一个语句附加到上一个语句,创建一批插入脚本,每个记录一个。