我如何更新和插入在一起

        require_once ('database.php');

$name = mysql_real_escape_string ($_REQUEST["name"]);
$course = mysql_real_escape_string ($_REQUEST["course"]);
$email = mysql_real_escape_string ($_REQUEST["email"]);
$contact = mysql_real_escape_string ($_REQUEST["contact"]);
$Date = mysql_real_escape_string ($_REQUEST["Date"]);

$sql = "SELECT * FROM registerlist WHERE name = '" . $name . "'";
$result = mysql_query ($sql, $dbconn);

if (mysql_num_rows ($result) > 0) {
    $resultStr = header("Location:blog.php");

} else {

    $result = "SELECT * FROM courselist WHERE cname = '" . $course
    . "'";
    $row=mysql_fetch_row($result);

    $sql = "INSERT INTO registerlist (name, Course, Email, Contact,
  Date) VALUES ('" . $name . "', '" . $course . "', '" . $email . "', '" .
   $contact . "','" . $date . "')";

    $result1= mysql_query($sql, $dbconn);
 $result =mysql_query("UPDATE courselist SET $Row['slot'] =
           '$Row['slot'] - 1 '");
    if ($result1) {
    $resultStr = header("Location:blog.php");

    }

  }

  echo json_encode($resultStr);


如果该人注册该课程,则该课程槽位将减1,并将学生文档插入注册清单数据库。

最佳答案

我希望我确实理解正确:您想在将记录插入到courselist表的同时更新registerlist表吗?可以使用触发器(https://dev.mysql.com/doc/refman/8.0/en/trigger-syntax.html,如果两个数据库都在同一SQL服务器上运行)和/或表锁(https://dev.mysql.com/doc/refman/8.0/en/lock-tables.html)来完成:


无触发


锁表courselist
将记录插入到registerlist
更新表courselist
发布表courselist

带扳机
您需要一个在写入courselist表之前锁定表registerlist的触发器,以及一个在写入courselist之后更新registerlist并释放该锁的触发器。
在这种情况下,您只需将记录从PHP代码插入到registerlist中,并且表锁定和courselist更新是由SQL Server中的触发器完成的。


无论如何,您不能同时写入两个表,没有SQL语句可以做到这一点。但是使用锁可以模拟这种行为。

定义SQL语句的目标表时,如果Connection每个Default使用不同的数据库,则可以在表的数据库名称前添加databaseName.tableName之类的名称。

但是aynber的评论绝对正确-您应尽快离开mysql_*

编辑:此SQL示例应显示表锁定的工作方式(有关所有信息,可以从上面的链接在MySQL文档中找到):

LOCK TABLES courselist WRITE;
INSERT INTO registerlist …;
UPDATE courselist …;
UNLOCK TABLES;


您将需要WRITE锁,因为您将要写入表。在释放锁定之前,其他会话中的其他读取,写入或锁定语句将被阻止。

READ锁将防止任何会话修改该表。除非您释放该锁,并且其他会话中的所有其他READ锁也都释放,否则将阻止写(和写锁定)尝试。

关于php - 在一个PHP中在不同的数据库中插入和更新,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54748891/

10-09 18:46