вставить и обновить в другой базе данных в одном PHP - PullRequest
0 голосов
/ 18 февраля 2019

как я могу обновить и вставить вместе

        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, а документ студента будет вставлен в базу данных реестра.

1 Ответ

0 голосов
/ 18 февраля 2019

Надеюсь, я все правильно понял: вы хотите обновить таблицу 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):

  1. Без триггера

    • Таблица блокировок courselist
    • Вставить запись в registerlist
    • Таблица обновлений courselist
    • Таблица разблокировок courselist
  2. С триггером Вам нужен триггер, который блокирует таблицу courselist перед записью в таблицу registerlist, и триггер, который обновляет courselist и снимает блокировку после записи в registerlist. В этом случае вы просто вставляете запись в registerlist из своего PHP-кода, и триггеры на сервере SQL выполняют блокировку таблицы и courselist обновление.

В любом случае вы не можете писать в обе таблицы одновременно, для этого нет оператора SQL, но с помощью блокировок вы можете смоделировать такое поведение.

При определении целевой таблицы SQLоператор, вы можете добавить имя базы данных таблиц, например databaseName.tableName, если соединение используетt базы данных по умолчанию.

Но айнбер из комментариев абсолютно прав - вы должны отойти от mysql_* как можно скорее!

Редактировать : этот пример SQL должен показать, какблокировка таблицы работает (всю информацию об этом можно найти в документации MySQL по ссылке выше):

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

Вам понадобится блокировка WRITE, так как вы собираетесь писать вТаблица.Другие операторы чтения, записи или блокировки из других сеансов блокируются до тех пор, пока вы не снимите блокировку.

Блокировка READ предотвратит изменение таблицы любым сеансом.Попытки записи (и блокировки записи) блокируются до тех пор, пока вы не снимите блокировку и не будут сняты все другие блокировки READ из других сеансов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...