[英]Delete from multiple tables with SQL in PHP
所以我试图从多个表中删除行。 我看过以下问题,但似乎都无法解决我的问题。 无论我尝试什么,我总是收到以下错误:
致命错误:在非对象上调用成员函数bind_param()
在提出新问题之前,我考虑了以下问题以尝试帮助我。
基本上,我想做的是一个允许用户删除其帐户的功能。 他们的帐户在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.