php - 在 PHP 中使用 SQL 从多个表中删除

标签 php mysql

所以我试图从多个表中删除行。我查看了以下问题,但似乎没有一个问题能解决我的问题。无论我尝试什么,我都会收到以下错误:

Fatal error: Call to a member function bind_param() on a non-object

以下是我在提出新问题之前查看过的一些问题,希望能对我有所帮助。

Delete with Join in MySQL

Deleting using LEFT JOIN

Deleting rows from multiple tables in MySQL

MySQL delete row from multiple tables

基本上我想要做的是一个允许用户删除其帐户的功能。他们的帐户在 4 个不同的表中包含信息,每个表都有一个共同的“id”,但名称不同。

在继续之前,我应该说,用户可能没有在其中一个表中存储任何信息。不知道这是否是抛出错误的原因

这是我的表结构:

table users

user_id | firstname | surname 
-------------------------------
 10     | Joe       | Bloggs
 16     | Jane      | Doe


table pets

pet_id  | pet_user_id | pet_name 
-------------------------------
 1      | 10          | Rover
 2      | 16          | Jess

table report

report_id | rep_user_id | rep_content 
-------------------------------
 1        | 10          | Hello World
 2        | 16          | Goodbye World

table user_files

file_id   | file_user_id| file 
-------------------------------
 1        | 10          | agreement.pdf
 2        | 16          | cv.docx

假设我想从每个表中删除 ID 为 16 的用户。以下是我到目前为止所尝试过的。

第一:

$stmt = $conn->prepare('DELETE * FROM users, pets, report, user_files WHERE user_id = ?, pet_user_id = ?, rep_user_id = ?, file_user_id = ? ');

第二:

$stmt = $conn->prepare('DELETE users.*, pets.*, reports.*, user_files.* FROM users LEFT JOIN pets ON pets.pet_user_id=users.user_id LEFT JOIN report ON report.rep_user_id=users.user_id LEFT JOIN user_files ON user_files.user_id=users.user_id WHERE user_id = ?');

第三:

$stmt = $conn->prepare('DELETE users, pets, report, user_files FROM 
  table1 as users 
  INNER JOIN  table2 as pets on users.user_id = pets.pet_user_id
  INNER JOIN  table3 as report on users.user_id=report.rep_user_id
  INNER JOIN  table4 as user_files on users.user_id=user_files.user_id
  WHERE  users.user_id= ?');

? 使用 $stmt->bind_param('i', $user_id); 进行绑定(bind),其中 $user_id 是从定义的 session 变量。

最佳答案

我认为你的第三个语句应该有效,但我会用左连接构建它。

请尝试以下 SQL 更新:

DELETE users, pets, report, user_files 
FROM users
LEFT JOIN pets ON (pets.pet_user_id=users.user_id)
LEFT JOIN report ON (report.rep_user_id=users.user_id)
LEFT JOIN user_files ON (user_files.file_user_id=users.user_id)
WHERE users.user_id=?;

您应该尝试在 MySQL 控制台上执行此语句(参数“16”作为“user_id”)并检查它是否有效。

如果没有,我假设您的绑定(bind)变量$user_id有问题。您能为我们提供 var_dump($user_id) 的输出吗?

关于php - 在 PHP 中使用 SQL 从多个表中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41915448/

相关文章:

javascript - 进行 php ajax 类型回调的正确方法

php - 大量的if's,可以吗?

php - Google Analytics PHP5 界面始终无法显示结果

php - 从mysql中的表中删除连续的重复项

mysql - WordPress 迁移损坏的图像 - 即使在更新数据库后

php - 这个表单和 MySQL 查询有什么问题?

php - 在 Paypal 的快速结帐 API 中显示成本/价格

php - 将工作负载从 PHP 转移到 MySQL

php - mysql 索引如何使 SELECT 查询更快

c# - mysql 在 c# 上选择错误,但在 navicat 中的查询生成器上运行