【问题标题】:inserting additional values immediately following a successful insert using PHP+MySQL在使用 PHP+MySQL 成功插入后立即插入附加值
【发布时间】:2009-02-27 19:22:01
【问题描述】:
if(isset($_REQUEST['SAVE'])) {
    $sql = "SELECT SecName FROM section WHERE SecID='$section'";
    $result = mysql_query($sql);
    while ($row = mysql_fetch_assoc($result)){
        $SecName = $row["SecName"];
    }
    $sql = "SELECT SubjName FROM subject WHERE SubjID='$subject'";
    $result = mysql_query($sql);
    while ($row = mysql_fetch_assoc($result)){
        $SubjName = $row["SubjName"];
    }

    $check = mysql_query("SELECT SecID FROM service where SubjID='$SubjName'")or die(mysql_error());
    $bool = 1;
    while($info = mysql_fetch_array( $check )) 
        if(($info['SecID'] == $SecName)){
            $bool = 0;
        }
    if($bool){

        $check = mysql_query("SELECT * FROM service ")or die(mysql_error());
        $bool = 1;
        while($info = mysql_fetch_array( $check )) 
            if(($info['Start_date'] == $Start_date) && ($info['Venue'] == $Venue) || ($info['Start_date'] == $Start_date) && ($info['Facilitator'] == $Facilitator)){
                $bool = 0;
            }
        if($bool){

            $sql="INSERT INTO service ( ServiceID, Date, Semester, School_year, Start_date, Venue, Facilitator, Stype, SecID, SubjID)VALUES('$RecCode','$Date','$Semester','$School_year','$Start_date','$Venue','$Facilitator','$Stype', '$SecName', '$SubjName')";



            if (!mysql_query($sql,$con))
                {
                    die('Error: ' . mysql_error());
                }
            echo '<script type="text/javascript">';
            echo 'alert("Save Successfully!");';
            echo 'window.location="Admin_RecSchedMapLst.php";';
            echo '</script>';
            mysql_close($con);
        }else
            {       
                echo '<script type="text/javascript">';
                echo 'alert("Conflicting schedule for Venue or Facilitator!");';
                echo '</script>';
            }                       
    }else
        {   
            echo '<script type="text/javascript">';
            echo 'alert("The SECTION has been already scheduled!");';
            echo '</script>';
        }                   
}                   

/*  $result = mysql_query("SELECT SIDno FROM class WHERE SecID=$SecID AND SubjID=$SubjID");
$row = mysql_fetch_assoc($result);
$SIDno = $row['SIDno'];
$result = mysql_query("SELECT ServiceID FROM service WHERE SecID=$SecID AND SubjID=$SubjID");
$row = mysql_fetch_assoc($result);
$ServiceID = $row['ServiceID'];
$sql="INSERT INTO registered ( ServiceID, IDno, Stype )VALUES('$ServiceID','$SIDno','$Stype')"; */                          

}

此代码工作正常,。我只想问我怎么可能处理上面评论的代码。我要做的就是在插入 serviceid 时,我还想立即将 serviceID、idno、type 插入到另一个已注册的表中。

【问题讨论】:

  • 感谢您清理标签。

标签: php mysql


【解决方案1】:

使用mysql_insert_id 函数来获取您刚刚插入的行的ID 比执行另一个SELECT 更容易和更好。例如:

$sql="INSERT INTO service ( ServiceID, Date, Semester, School_year, Start_date, Venue, Facilitator, Stype, SecID, SubjID) VALUES ('$RecCode','$Date','$Semester','$School_year','$Start_date','$Venue','$Facilitator','$Stype', '$SecName', '$SubjName')";

if (mysql_query($sql,$con)) {
   $ServiceID = mysql_insert_id();
   $sql="INSERT INTO registered ( ServiceID, IDno, Stype )VALUES('$ServiceID','$SIDno','$Stype')";           
   mysl_query($sql, $con);  // check for error here too though
}
else {
   echo "OH NO!!!";
}

另外,请注意SQL injection 与您构建 SQL 字符串的方式有关。

【讨论】:

  • 他实际上不必那样做。他只是将新的 ServiceID 插入为 $RecCode。当然值得一提,但我认为他正在寻找与他刚刚插入的不同的 ServiceID(或者我只是很困惑)?
  • 将插入相同的 serviceId 但 IDno 也需要从另一个名为 class 的表中选择。并在那里获取所有 idno 并将其插入到另一个名为 register 的表中,包括 serviceid
  • SQL 注入非常好。没想到要提。
【解决方案2】:

在第一个 SQL INSERT 命令之后执行另一个 SQL INSERT 命令,例如:

$sql="INSERT INTO service ( ServiceID, Date, Semester, School_year, Start_date, Venue, Facilitator, Stype, SecID, SubjID) VALUES ('$RecCode','$Date','$Semester','$School_year','$Start_date','$Venue','$Facilitator','$Stype', '$SecName', '$SubjName')";

if (!mysql_query($sql,$con))
{
    die('Error: ' . mysql_error());
}
else
{
    /*Begin your SELECT and INSERT code*/
    $result = mysql_query("SELECT SIDno FROM class WHERE SecID=$SecID AND SubjID=$SubjID");
    $row = mysql_fetch_assoc($result);
    $SIDno = $row['SIDno'];
    $result = mysql_query("SELECT ServiceID FROM service WHERE SecID=$SecID AND SubjID=$SubjID");
    $row = mysql_fetch_assoc($result);
    $ServiceID = $row['ServiceID'];
    $sql2 = "INSERT INTO registered ( ServiceID, IDno, Stype )VALUES('$ServiceID','$SIDno','$Stype')";   
    /*End your SELECT and INSERT code*/                      

    if(!mysql_query($sql2,$con))
    {
        die('Error: ' . mysql_error());
    }
} 

【讨论】:

  • 哦,我明白了……基本上是的。只需将其放在第一个 INSERT 之后即可。
  • ...并像我的例子一样执行它。
  • 但是忘了告诉你,idno 号需要从另一个名为 stude 的表中选择。
  • 是的,我想通了,您可以使用您的代码进行选择,并将其放在 else 子句中。我会为你编辑这个。
  • 此代码是否会获取所有在表格类中注册特定科目和部分的学生?并将其全部插入注册表中?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-12
  • 1970-01-01
  • 1970-01-01
  • 2015-07-14
  • 2014-03-18
相关资源
最近更新 更多