вставка значений из цикла - PullRequest
0 голосов
/ 01 марта 2009
$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 ]

3 голосов
/ 01 марта 2009

Если вы не планируете что-либо делать с извлеченными данными, вы можете использовать оператор INSERT .. SELECT ...

Пример:

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

И, как написано до меня, избегайте переменных ...

3 голосов
/ 01 марта 2009

Вы, вероятно, выполняете запрос после цикла, поэтому вставляется только последняя запись.

Попробуйте выполнить запрос вставки в конце цикла:

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 голос
/ 01 марта 2009

Примечание: убедитесь, что вы экранируете свои переменные с помощью 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;
}
0 голосов
/ 01 марта 2009

Изменить эту строку:

$sql2="INSERT INTO registered..."

к этому:

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

внутри петли. Вы случайно перезаписываете оператор вставки каждый раз. Если вы используете .=, вы добавите следующий оператор к предыдущему, создав пакет сценариев вставки, по одному для каждой записи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...