【问题标题】:insert and update in different database in one php在一个php中插入和更新不同的数据库
【发布时间】:2019-02-18 13:56:21
【问题描述】:

如何更新和插入一起

        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,并将学生文档插入注册列表数据库中。

【问题讨论】:

标签: php html mysql database


【解决方案1】:

希望我理解正确:您想在将记录插入registerlist 表的同时更新courselist 表?这可以使用触发器(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)来完成:

  1. 无触发

    • 锁表courselist
    • 将记录插入registerlist
    • 更新表courselist
    • 发布表courselist
  2. 带触发器 您需要一个在写入registerlist 表之前锁定表courselist 的触发器,以及一个更新courselist 并在写入registerlist 后释放锁的触发器。 在这种情况下,您只需将记录从您的 PHP 代码插入到registerlist,并且表锁定和courselist 更新由 SQL 服务器内的触发器完成。

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

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

但是来自 cmets 的 aynber 是绝对正确的 - 你应该尽快离开 mysql_*

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

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

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

READ 锁会阻止任何会话修改表。写入(和写入锁定)尝试将被阻止,直到您释放锁定并且来自其他会话的所有其他 READ 锁定也被释放。

【讨论】:

  • 如何创建锁?我是 mysql 新手
  • @qqqss 我用一个 SQL 示例和一些基本的锁定信息更新了我的帖子。
猜你喜欢
  • 2021-03-27
  • 1970-01-01
  • 2017-04-15
  • 1970-01-01
  • 2020-05-30
  • 1970-01-01
  • 2015-06-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多