Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 代码未从多个表中删除所有记录_Php_Mysql - Fatal编程技术网

Php 代码未从多个表中删除所有记录

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

我创建了一个delete.php,我想从三个名为person、address和cv的表中删除记录。。。通过获取他们的ID,我想删除他们的记录,但代码只删除person表中的所有记录,而不删除address和CV中的所有记录

<?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