SQLコードにいくつかの問題があります...削除ボタンを作成しました。person_idが削除されると、テーブルのアドレスとcvから値を削除する必要があります。それを削除するのは、アドレスとcvからではなく、personからの値だけを削除することです。 はい私はこのコードで知っているのですが、DELETE ACTIONはNO ACTIONですが、ON DELETE CASCADEをSQLスクリプトに追加しました!。他のテーブルの値を削除しない削除ボタン
マイSQL:
-- MySQL Script generated by MySQL Workbench
-- 05/09/16 15:12:48
-- Model: New Model Version: 1.0
-- MySQL Workbench Forward Engineering
SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @[email protected]@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 [email protected]_SQL_MODE;
SET [email protected]_FOREIGN_KEY_CHECKS;
SET [email protected]_UNIQUE_CHECKS;
マイDelete.php:私はADDRESS_IDを追加し、まだそれが働いていない削除するcv_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();
?>
制約が実際に「取られた」ことを確認し、テーブルが適切に索引付けされていることを確認します。 – LSerni
どういう意味ですか?「制約が実際に「取られた」ことを確認し、テーブルが適切にインデックスされていることを確認してください。申し訳ありませんが、PHP/Mysqlの新機能です – GLRotterdam
テーブル定義とインデックスを読み返してください。私は外部キー制約(コマンドライン?GUI?WebGUI?...)をどのように変更したかわからないので、制約変更が実際には失敗*してエラーメッセージが発行/通知/通知されなかった可能性があります。あなたはまだ「行動」していません。 – LSerni