使用 MySQL 和 PHP 从多个表中删除记录

问题描述

我正在尝试使用 sql 删除 PHP 网站中的多个相关记录。我环顾四周,似乎对我的数据库没有任何作用。本质上,在我的站点中,我单击了一个按钮,该按钮将删除用户的帐户。这意味着我必须从 users 表中删除 USER_ID,从帐户表中删除 Users_USER_ID,从事务表中删除 ACCOUNTS_ACCOUNTS_ID。到目前为止,这是我的 delete.PHP 页面

<?PHP

include "includes/server.PHP"; // Using database connection file here
session_start();

$id = $_SESSION['userid']; // get session user id

$sql = "DELETE FROM users WHERE USER_ID = '$id'";
$sql2 = "DELETE FROM transactions WHERE ACCOUNTS_ACCOUNTS_ID = 14";
$sql3 = "DELETE FROM accounts WHERE Users_USER_ID = '$id'";

$del = MysqLi_query($conn,$sql);
$del2 = MysqLi_query($conn,$sql2);
$del3 = MysqLi_query($conn,$sql3);

if (($del && $del2) || ($del && $del2 && $del3) || ($del && $del3) || ($del)) {
    MysqLi_close($conn); // Close connection
    header("location:index.PHP"); // redirects to index page
    exit;
} else {
    echo "Error deleting record"; // display error message if not delete
}

这是我创建三个表的 sql 方案:

    DROP TABLE IF EXISTS `accounts`;
    /*!40101 SET @saved_cs_client     = @@character_set_client */;
    /*!50503 SET character_set_client = utf8mb4 */;
    CREATE TABLE `accounts` (
      `ACCOUNTS_ID` int NOT NULL AUTO_INCREMENT,`ACCOUNT_BALANCE` float NOT NULL DEFAULT '0',`Users_USER_ID` int NOT NULL,`Account_TYPE_ACCOUNT_TYPE_ID` int NOT NULL,PRIMARY KEY (`ACCOUNTS_ID`),KEY `fk_ACCOUNTS_Users1_idx` (`Users_USER_ID`),KEY `fk_ACCOUNTS_Account_TYPE1_idx` (`Account_TYPE_ACCOUNT_TYPE_ID`),CONSTRAINT `fk_ACCOUNTS_Account_TYPE1` FOREIGN KEY (`Account_TYPE_ACCOUNT_TYPE_ID`) REFERENCES `account_type` (`ACCOUNT_TYPE_ID`),CONSTRAINT `fk_ACCOUNTS_Users1` FOREIGN KEY (`Users_USER_ID`) REFERENCES `users` (`USER_ID`)
    ) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `transactions`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `transactions` (
  `TRANSACTIONS_ID` int NOT NULL AUTO_INCREMENT,`AMOUNT_OF_TRANSACTION` float NOT NULL,`TRANSACTION_APPRoval` varchar(45) CHaraCTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`TRANSACTION_FROM` varchar(45) NOT NULL,`TRANSACTION_TO` varchar(45) NOT NULL,`ACCOUNTS_ACCOUNTS_ID` int NOT NULL,`TRANSACTION_TYPE_TRANSACTION_TYPE_ID` int NOT NULL,PRIMARY KEY (`TRANSACTIONS_ID`),KEY `fk_TRANSACTIONS_ACCOUNTS1_idx` (`ACCOUNTS_ACCOUNTS_ID`),KEY `fk_TRANSACTIONS_TRANSACTION_TYPE1_idx` (`TRANSACTION_TYPE_TRANSACTION_TYPE_ID`),CONSTRAINT `fk_TRANSACTIONS_ACCOUNTS1` FOREIGN KEY (`ACCOUNTS_ACCOUNTS_ID`) REFERENCES `accounts` (`ACCOUNTS_ID`),CONSTRAINT `fk_TRANSACTIONS_TRANSACTION_TYPE1` FOREIGN KEY (`TRANSACTION_TYPE_TRANSACTION_TYPE_ID`) REFERENCES `transaction_type` (`TRANSACTION_TYPE_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;


DROP TABLE IF EXISTS `users`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `users` (
  `USER_ID` int NOT NULL AUTO_INCREMENT,`USER_TYPE_USER_TYPE_ID` int NOT NULL,`USER_NAME` varchar(45) NOT NULL,`PASSWORD` varchar(128) CHaraCTER SET utf8 COLLATE utf8_general_ci NOT NULL,`FirsT_NAME` varchar(45) NOT NULL,`LAST_NAME` varchar(45) NOT NULL,`EMAIL_ADDRESS` varchar(45) NOT NULL,PRIMARY KEY (`USER_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

我一直在想办法把它放在 delete.PHP 中的一个 sql 语句或多个语句中,但我没有运气。任何帮助将不胜感激!

更新:我尝试了以下操作,但仍然没有删除记录:

$sql = "DELETE users,accounts,transactions 
    FROM users
    LEFT JOIN accounts on (accounts.Users_USER_ID = users.USER_ID)
    LEFT JOIN transactions on (transactions.ACCOUNTS_ACCOUNTS_ID = accounts.ACCOUNTS_ID)
    WHERE users.USER_ID = '$id'";

$del = MysqLi_query($conn,$sql);

if ($del ) {
    MysqLi_close($conn); // Close connection
    header("location:index.PHP"); // redirects to index page
    exit;
} else {
    echo "Error deleting record"; // display error message if not delete
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)