在删除文件之前检查用户是否拥有文件


Checking if user owns file before deleting it

我正在为我的网站构建一个API,允许用户删除他们上传的文件。显然,我想在通过 API 删除该文件之前检查用户是否拥有该文件。

我有一个文件表和一个用户表,这是架构:

f_id, s_id, u_id, name, size, uploaded
u_id, username, password, email, activated, activation_code

u_id是外键。文件表中的u_id字段指向用户表中的u_id

给定用户用户名,我想找到用户u_id,然后通过文件ID(f_id)检查他们是否拥有该文件。

我写了这个SQL:

$sql = 'SELECT u.username
        FROM `users` u
        JOIN `files` f
        ON u.u_id = f.u_id
        WHERE f_id = ? AND u.u_id = ?
        LIMIT 1';

我假设如果我在 API 请求中u_id用户,这会起作用,但唉,我只得到他们的用户名。

如何修改该 SQL 以查找其用户 ID 并使用它?

谢谢。

编辑:好的,我有这个查询,但它总是返回一个空的结果集,即使文件 ID 和用户名都存在。

SELECT u.username
FROM `users` u
JOIN `files` f
ON u.u_id = f.u_id
WHERE f.f_id = ? AND u.username = ?
LIMIT 1

试一试:

SELECT f.name
FROM `users` AS u
INNER JOIN `files` AS f ON f.u_id = u.u_id AND f.f_id = ?
WHERE u.username = ?
LIMIT 1

我认为在这种情况下,内部连接更合适(也可能比左连接略快)