繁体   English   中英

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

[英]Delete from multiple tables with SQL in PHP

所以我试图从多个表中删除行。 我看过以下问题,但似乎都无法解决我的问题。 无论我尝试什么,我总是收到以下错误:

致命错误:在非对象上调用成员函数bind_param()

在提出新问题之前,我考虑了以下问题以尝试帮助我。

在MySQL中加入联接删除

使用LEFT JOIN删除

从MySQL中的多个表中删除行

MySQL从多个表中删除行

基本上,我想做的是一个允许用户删除其帐户的功能。 他们的帐户在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);绑定$stmt->bind_param('i', $user_id); 其中$user_id是通过会话变量定义的。

我认为您的第三条语句应该起作用,但是我会用左联接来构建它。

请尝试以下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”),并检查其是否有效。

如果没有,我认为您的绑定变量$user_id有问题。 能否提供var_dump($user_id)的输出?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM