所以我试图从多个表中删除行。我查看了以下问题,但似乎没有一个问题能解决我的问题。无论我尝试什么,我都会收到以下错误:
Fatal error: Call to a member function bind_param() on a non-object
以下是我在提出新问题之前查看过的一些问题,希望能对我有所帮助。
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/