$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')";
}
这是我的代码。它的工作,但它只将一个数据插入数据库。如何从循环中插入所有可能的数据。任何人都可以帮助我吗?
答案 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语句。如果您使用 .=
,则会将下一个语句附加到上一个语句,创建一批插入脚本,每个记录一个。