PHP';PDO异常';带有消息';SQLSTATE[23000]:完整性约束

PHP';PDO异常';带有消息';SQLSTATE[23000]:完整性约束,php,mysql,Php,Mysql,它应该做什么:从customer表中删除一个customer 借款人和客户表的SQL: create table customer (customer_name varchar(15) not null, customer_street varchar(12) not null, customer_city varchar(15) not null, primary key(customer_name))ENG

它应该做什么:从customer表中删除一个customer

借款人和客户表的SQL:

create table customer
   (customer_name       varchar(15)     not null,
    customer_street     varchar(12)     not null,
    customer_city       varchar(15)     not null,
    primary key(customer_name))ENGINE=InnoDB;

create table borrower
   (customer_name       varchar(15)     not null,
    loan_number         varchar(15)     not null,
    primary key(customer_name, loan_number),
    foreign key(customer_name) references customer(customer_name),
    foreign key(loan_number) references loan(loan_number)
        ON UPDATE CASCADE ON DELETE CASCADE)ENGINE=InnoDB;
我知道由于引用完整性约束,我需要首先删除带有外键的表。我怎样才能先放下带有外键的表? 错误

到目前为止的PHP代码

<!DOCTYPE html>
<html>
<body>
<div style = "width:30%; float:left">
</div>

<?php 
include_once 'banking_db.php';
# form data
$customer_name=isset($_POST['customer_name']) ? $_POST['customer_name'] : '';
$customer_street=isset($_POST['customer_street']) ? $_POST['customer_street'] : '';
$customer_city=isset($_POST['customer_city']) ? $_POST['customer_city'] : '';
$query = "update customer set customer_name = :customer_name, customer_street = :customer_street, customer_city = :customer_city;";
$data = array( 'customer_name' => $customer_name, 'customer_street' => $customer_street, 'customer_city' => $customer_city);
$stmt = $conn->prepare($query);
if($stmt -> execute($data))
{
   $rows_affected = $stmt->rowCount();
   echo "<h2>".$rows_affected." row updated sucessfully!</h2>";
   include 'banking_display.php';
   display("SELECT * FROM customer;");
}
else
{
  echo "update failed: (" . $conn->errno . ") " . $conn->error;
}
$conn->close();
?>
</body>
</html>

正如前面所说,您需要在外键中添加
更新层叠删除层叠

但是您的查询将更新所有具有相同信息的客户,因此在查询中添加一个“WHERE”子句

客户名称|客户街|客户城市 :------------ | :-------------- | :------------ 测试1 |测试街1 |测试城市
dbfiddle

我不知道你想做什么。要删除,您需要使用删除查询,但我只在代码中看到更新查询。此外,未执行借款人表的更新查询。您可能希望在更新或删除这些外键上的数据时。。。假设您在删除客户时要删除
借款人
记录。@CD001我添加了CASCADE,得到了相同的错误
<!DOCTYPE html>
<html>
<body>
<div style = "width:30%; float:left">
</div>

<?php 
include_once 'banking_db.php';
# form data
$customer_name=isset($_POST['customer_name']) ? $_POST['customer_name'] : '';
$customer_street=isset($_POST['customer_street']) ? $_POST['customer_street'] : '';
$customer_city=isset($_POST['customer_city']) ? $_POST['customer_city'] : '';
$query = "update customer set customer_name = :customer_name, customer_street = :customer_street, customer_city = :customer_city;";
$data = array( 'customer_name' => $customer_name, 'customer_street' => $customer_street, 'customer_city' => $customer_city);
$stmt = $conn->prepare($query);
if($stmt -> execute($data))
{
   $rows_affected = $stmt->rowCount();
   echo "<h2>".$rows_affected." row updated sucessfully!</h2>";
   include 'banking_display.php';
   display("SELECT * FROM customer;");
}
else
{
  echo "update failed: (" . $conn->errno . ") " . $conn->error;
}
$conn->close();
?>
</body>
</html>
create table customer
   (customer_name       varchar(15)     not null,
    customer_street     varchar(12)     not null,
    customer_city       varchar(15)     not null,
    primary key(customer_name))ENGINE=InnoDB;

create table borrower
   (customer_name       varchar(15)     not null,
    loan_number         varchar(15)     not null,
    primary key(customer_name, loan_number),
    foreign key(customer_name) references customer(customer_name)
        ON UPDATE CASCADE ON DELETE CASCADE)ENGINE=InnoDB;
INSERT INTO customer VALUES ('TEST','teststreet','Testcity')
INSERT INTO borrower VALUES ('TEST','loan1')
UPDATE customer SET customer_name = 'test1', customer_street = 'teststreet1' WHERE customer_name = 'TEST'
SELECT * FROM customer
customer_name | customer_street | customer_city :------------ | :-------------- | :------------ test1 | teststreet1 | Testcity