Php 删除按钮不删除其他表中的值
我的SQL代码有一些问题。。。我创建了一个删除按钮,因此当person_id为delete时,它还应该从表address和cv中删除值。然而,当我单击delete时,它只从person而不是address和cv中删除值是的,我知道在这段代码中,关于删除的操作是关于无操作的,但是我在sql脚本中添加了关于删除级联的操作 我的SQL:Php 删除按钮不删除其他表中的值,php,mysql,Php,Mysql,我的SQL代码有一些问题。。。我创建了一个删除按钮,因此当person_id为delete时,它还应该从表address和cv中删除值。然而,当我单击delete时,它只从person而不是address和cv中删除值是的,我知道在这段代码中,关于删除的操作是关于无操作的,但是我在sql脚本中添加了关于删除级联的操作 我的SQL: -- MySQL Script generated by MySQL Workbench -- 05/09/16 15:12:48 -- Model: New Mod
-- MySQL Script generated by MySQL Workbench
-- 05/09/16 15:12:48
-- Model: New Model Version: 1.0
-- MySQL Workbench Forward Engineering
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
-- -----------------------------------------------------
-- Schema persons
-- -----------------------------------------------------
-- -----------------------------------------------------
-- Schema persons
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `persons` DEFAULT CHARACTER SET utf8 ;
USE `persons` ;
-- -----------------------------------------------------
-- Table `persons`.`address`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `persons`.`address` (
`address_id` INT(11) NOT NULL AUTO_INCREMENT,
`address_street` VARCHAR(45) NULL,
`address_housenumber` VARCHAR(4) NULL,
`address_zipcode` VARCHAR(6) NULL,
`address_city` VARCHAR(45) NULL,
`address_state` VARCHAR(45) NULL,
PRIMARY KEY (`address_id`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `persons`.`cv`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `persons`.`cv` (
`cv_id` INT NOT NULL AUTO_INCREMENT,
`cv_name` VARCHAR(255) NULL,
`cv_path` VARCHAR(255) NULL,
`cv_type` VARCHAR(255) NULL,
PRIMARY KEY (`cv_id`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `persons`.`person`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `persons`.`person` (
`person_id` INT(11) NOT NULL AUTO_INCREMENT,
`person_firstname` VARCHAR(45) NULL,
`person_lastname` VARCHAR(45) NULL,
`person_email` VARCHAR(45) NULL,
`person_phonenumber` INT(10) NULL,
`person_cv` INT(11) NULL,
`person_address` INT(11) NULL,
PRIMARY KEY (`person_id`),
INDEX `address_id_idx` (`person_address` ASC),
INDEX `cv_id_idx` (`person_cv` ASC),
CONSTRAINT `address_id`
FOREIGN KEY (`person_address`)
REFERENCES `persons`.`address` (`address_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `cv_id`
FOREIGN KEY (`person_cv`)
REFERENCES `persons`.`cv` (`cv_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
我的Delete.php:我添加了要删除的地址id和简历id,但它仍然不起作用
<?php
$servername = "localhost";
$username = "root";
$password = "usbw";
$dbname = "persons";
// CREATE A CONNECTION WITH THE DATABASE
// CONNECTIE MAKEN MET DATABASE
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// GET ID FROM person_id
// PAK ID VAN person_id
$person_id = (isset($_GET['person_id']) ? $_GET['person_id'] : null);
// CREATE PREPARE STATMENT FOR DELETING RECORDS FROM person_id
// MAAK EEN STATEMENT OM WAARDES TE VERWIJDEREN VAN person_id
$stmt = $conn->prepare('DELETE FROM `person` WHERE person_id = ?');
$stmt->bind_param('s', $person_id);
// EXECUTE STATEMENT AND IF RESULT IS FALSE SHOW ERROR
// VOER STATEMENT UIT EN ALS VALS IS GEEF ERROR AAN
$result = $stmt->execute();
if ($result === FALSE) {
die("Error: " . $stmt->error);
}
$address_id = (isset($_GET['address_id']) ? $_GET['address_id'] : null);
$stmt = $conn->prepare('DELETE FROM `address` WHERE address_id = ?');
$stmt->bind_param('s', $address_id);
// EXECUTE STATEMENT AND IF RESULT IS FALSE SHOW ERROR
// VOER STATEMENT UIT EN ALS VALS IS GEEF ERROR AAN
$result = $stmt->execute();
if ($result === FALSE) {
die("Error: " . $stmt->error);
}
$cv_id = (isset($_GET['cv_id']) ? $_GET['cv_id'] : null);
$stmt = $conn->prepare('DELETE FROM `cv` WHERE cv_id = ?');
$stmt->bind_param('s', $cv_id);
// EXECUTE STATEMENT AND IF RESULT IS FALSE SHOW ERROR
// VOER STATEMENT UIT EN ALS VALS IS GEEF ERROR AAN
$result = $stmt->execute();
if ($result === FALSE) {
die("Error: " . $stmt->error);
}
// AFTER CLICKING DELETE GO TO LINK
// NA HET DRUKKEN VAN DELETE GA NAAR LINK
header("Location: http://localhost:8080/Website/admin.php");
// CLOSE CONNECTION AND STATEMENT
// SLUIT CONNECTIE EN STATEMENT
$stmt->close();
$conn->close();
?>
如果没有外键定义,很难看出错误在哪里。我已尝试复制您的设置,并且可以保证此设置正常工作:
-- --------------------------------------------------------
-- Versione server: 5.5.49-0ubuntu0.14.04.1 - (Ubuntu)
-- S.O. server: debian-linux-gnu
-- --------------------------------------------------------
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET NAMES utf8mb4 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
CREATE TABLE IF NOT EXISTS `cv` (
`person_id` int(11) DEFAULT NULL,
`cv_text` varchar(32) DEFAULT NULL,
KEY `person_id` (`person_id`),
CONSTRAINT `FK_cv_persons` FOREIGN KEY (`person_id`) REFERENCES `persons` (`person_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `persons` (
`person_id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`person_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */;
/*!40014 SET FOREIGN_KEY_CHECKS=IF(@OLD_FOREIGN_KEY_CHECKS IS NULL, 1, @OLD_FOREIGN_KEY_CHECKS) */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
--现在我插入一些数据:
INSERT INTO `persons` (`person_id`) VALUES
(1),(2);
--以及链接的CV:
INSERT INTO `cv` (`person_id`, `cv_text`) VALUES
(1, 'Rossi'),(2, 'Verdi'),(2, 'Verdini');
--确认数据是否存在:
SELECT * FROM cv;
--从人员中删除一些数据:
DELETE FROM persons WHERE person_id = 2;
SELECT * FROM cv;
--验证数据是否已从cv中删除:
DELETE FROM persons WHERE person_id = 2;
SELECT * FROM cv;
…只返回一条记录-Rossi的,id 1。Id 2已消失。如果没有外键定义,很难看到错误在哪里。我已尝试复制您的设置,并且可以保证此设置正常工作:
-- --------------------------------------------------------
-- Versione server: 5.5.49-0ubuntu0.14.04.1 - (Ubuntu)
-- S.O. server: debian-linux-gnu
-- --------------------------------------------------------
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET NAMES utf8mb4 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
CREATE TABLE IF NOT EXISTS `cv` (
`person_id` int(11) DEFAULT NULL,
`cv_text` varchar(32) DEFAULT NULL,
KEY `person_id` (`person_id`),
CONSTRAINT `FK_cv_persons` FOREIGN KEY (`person_id`) REFERENCES `persons` (`person_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `persons` (
`person_id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`person_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */;
/*!40014 SET FOREIGN_KEY_CHECKS=IF(@OLD_FOREIGN_KEY_CHECKS IS NULL, 1, @OLD_FOREIGN_KEY_CHECKS) */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
--现在我插入一些数据:
INSERT INTO `persons` (`person_id`) VALUES
(1),(2);
--以及链接的CV:
INSERT INTO `cv` (`person_id`, `cv_text`) VALUES
(1, 'Rossi'),(2, 'Verdi'),(2, 'Verdini');
--确认数据是否存在:
SELECT * FROM cv;
--从人员中删除一些数据:
DELETE FROM persons WHERE person_id = 2;
SELECT * FROM cv;
--验证数据是否已从cv中删除:
DELETE FROM persons WHERE person_id = 2;
SELECT * FROM cv;
…只返回一条记录-Rossi的,id 1。Id 2已消失。我可以在您的表创建代码中看到一些对外键检查的编辑。我看到您备份了旧值,以便将其重置,但您确定在执行删除操作时,外键检查值为1吗?我可以在您的表创建代码中看到对外键检查的一些编辑。我看到您备份了旧值以重置它,但您确定在执行删除时,外键检查值为1吗?验证约束是否确实已“接受”,并且表是否已正确索引。您所说的“验证约束确实已接受”是什么意思“抱歉,我是PHP/MysqlRead新手,请读回表定义和索引。我不知道您是如何更改外键约束的(命令行?GUI?WebGUI?…),因此,可能您的约束更改实际上失败了,并且错误消息没有发出/发送/注意到,而您仍然处于
无操作
状态。我将phpmyadmin中的无操作更改为CASCADE,因此这不是问题所在。我还添加了我的delete.php。您可能已将“无操作”设置为“CASCADE”“但它真的有用吗?检查并确保您的delete cascade
规则存在。验证约束是否确实已“接受”,并且表是否已正确索引。您所说的“验证约束是否确实已“接受”,以及表是否已正确索引”是什么意思。很抱歉,我对PHP/MysqlRead不熟悉,请返回表定义和索引。我不知道您是如何更改外键约束的(命令行?GUI?WebGUI?…),因此可能您的约束更改实际上失败了,并且没有发出/发送/注意到错误消息,并且您仍然处于无操作
状态。我将phpmyadmin中的无操作更改为级联,因此这不是问题所在。我还添加了我的delete.php。您可能已经将“NO ACTION”设置为“CASCADE”,但它真的有效吗?检查并确保您的delete cascade
规则存在。那么我的代码是否正常?它是怎么来的?它不会从表地址和简历中删除任何信息。。。这很奇怪,因为我没有收到任何错误。我只想能够删除个人、地址和简历。当然,这三个表都有一个关系,所以我的代码可以吗?它是怎么来的?它不会从表地址和简历中删除任何信息。。。这很奇怪,因为我没有收到任何错误。我只想能够删除个人、地址和简历。当然这三张表都有关系,我明白你们的意思。。。如果我是对的,就没有旧的外键,因为我正在创建一个全新的数据库。如果我删除这两行并尝试一下会怎么样?我明白你的意思。。。如果我是对的,就没有旧的外键,因为我正在创建一个全新的数据库。如果我删除这两行并尝试一下会怎么样?