首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在一个php中插入和更新不同的数据库

问在一个php中插入和更新不同的数据库
EN

Stack Overflow用户
提问于 2019-02-18 21:56:21
回答 1查看 560关注 0票数 0

如何同时更新和插入

代码语言:javascript
复制
        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,学生文档将被插入注册表数据库。

EN

回答 1

Stack Overflow用户

发布于 2019-02-18 22:15:28

我希望我没有理解错:您希望在向registerlist表中插入记录的同时更新courselist表吗?这可以使用触发器(如果两个数据库在同一个SQL server上运行,则为https://dev.mysql.com/doc/refman/8.0/en/trigger-syntax.html)和/或表锁(https://dev.mysql.com/doc/refman/8.0/en/lock-tables.html)来完成:

不带触发器的

代码语言:javascript
复制
- Lock table `courselist`
- Insert the record to `registerlist`
- Update table `courselist`
- Release table `courselist`

​

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

在任何情况下,您都不能同时写入这两个表,因为没有SQL语句可以做到这一点。但是使用锁可以模拟这样的行为。

在定义SQL语句的目标表时,如果连接默认使用不同的数据库,则可以在表的数据库名称前加上databaseName.tableName。

但是来自评论的评论是绝对正确的-你应该尽快远离mysql_*!

SQL :这个示例应该显示表锁定是如何工作的(可以在上面的链接中的MySQL文档中找到关于表锁定的所有信息):

代码语言:javascript
复制
LOCK TABLES courselist WRITE;
INSERT INTO registerlist …;
UPDATE courselist …;
UNLOCK TABLES;

您将需要一个WRITE锁,因为您将写入表。来自其他会话的其他读取、写入或锁定语句将被阻塞,直到您释放锁为止。

READ锁将防止表被任何会话修改。在您释放锁之前,写入(和写入锁定)尝试都会被阻止,来自其他会话的所有其他READ锁也会被释放。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54748891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档