我如何更新和插入在一起
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/