Php 代码未从多个表中删除所有记录
我创建了一个delete.php,我想从三个名为person、address和cv的表中删除记录。。。通过获取他们的ID,我想删除他们的记录,但代码只删除person表中的所有记录,而不删除address和CV中的所有记录Php 代码未从多个表中删除所有记录,php,mysql,Php,Mysql,我创建了一个delete.php,我想从三个名为person、address和cv的表中删除记录。。。通过获取他们的ID,我想删除他们的记录,但代码只删除person表中的所有记录,而不删除address和CV中的所有记录 <?php $servername = "localhost"; $username = "root"; $password = "usbw"; $dbname = "persons"; // CREATE A CONNECTION WITH THE DATABASE
<?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();
?>
编辑:
我的桌子
您正在根据地址id和cvid从这两个表中删除,如果我正确理解您的表结构,您应该根据人员id从所有3个表中删除 根据我对您的表结构的理解,您应该在地址表和简历表中分别有一个person_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 person_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 person_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();
?>
如果你真的在地址和简历表上把person_id作为外键,那就太好了。您可能不一定需要为这两个表(CV和address)编写不同的删除操作。我猜是因为您没有将任何值加载到
$address\u id
或$CV\u id
中。我也猜,如果您查看php错误日志
会有一些错误消息告诉您查看绑定参数()
语句。它们使用变量$address\u id
和$cv\u id
,但在代码中没有任何地方可以创建这些变量或向其中加载任何值。因此,execute可能会运行,但它当然不会找到键为NULL
的行,或者PHP为不存在的变量生成的任何行。您的代码在查询字符串中需要3个变量,因此您访问的URL应该如下所示:delete.PHP?person_id=X&address_id=Y&cv_id=Z
。所有3个参数都在你的URL中吗?你能用sql格式发布你的模式吗?是的,这正是我想要的,但它不起作用。。。在我的数据库中,我的person_cv连接到cv_id,person_address连接到address_id,这两个都是级联删除的。但即使这样,它们也不会被删除。你最好向我们展示你的模式,这样我们就可以看到链接到WhatTright的内容-我的印象是地址表和cv表与person表具有相同的person_id(父子关系)因此,从persons、address和cv表中删除的所有内容都应使用一个公用键(分别为primary和foreign)链接person_ID。如果不是这样,那么是的-正如Riggs所说,我们可能应该看看您的模式。请参阅编辑我将添加更多图片我的印象是地址表和简历表将与person表具有相同的person_ID。您应该知道您创建了数据库,或者至少您有能力检查这是不是ha案例。但如果是这种情况,那么您的删除查询是错误的,因为它们不使用person\u ID
,而是使用$address\u ID
或$cv\u ID