0

嗨,我正在寻找一种在 php 或 mysql 中实现条件的方法,仅当数据库中存在“from_user_id”时才执行以下 mysql 查询?

我有一个名为 ptb_users 的表,它存储所有用户 ID,下面的查询插入内容的另一个表是 ptb_wallposts。

用户可以在其他用户墙上书写,但在用户可以在用户墙上书写之前/在插入查询运行之前,我希望条件与 ptb_users 交叉引用以确保发送消息的用户/from_user_id 存在。因此,如果用户 1 已登录并想向用户 2 的墙发送消息,则它首先检查 from_user_id 是否与 ptb_users 中的 user_id 匹配。

因此,例如,我不希望人们通过能够使 from_user_id 为 0 来将数据注入数据库,它必须与数据库中的 user_id 匹配或显示和错误消息。

有人可以建议我如何做到这一点。谢谢。

我的 ptb_wallposts 表看起来像这样

id   |     from_user_id   |  to_user_id  |  content

1               2                3            hello

我的 ptb_users 表如下所示:

id   |     user_id   |  

1             2            

mysql查询:

$sql = "INSERT INTO ptb_wallposts (id, from_user_id, to_user_id, content) VALUES (NULL, '".$_SESSION['user_id']."', '".$profile_id."', '".$content."');";
            mysql_query($sql, $connection);
4

2 回答 2

1

使用外键,SQL 为您完成这项工作。首先,您需要像这样添加它们

ALTER TABLE `ptb_wallposts`
    ADD CONSTRAINT `users_wallposts_fk_1` FOREIGN KEY (`from_user_id`) REFERENCES `ptb_users` (`id`) ON DELETE CASCADE,
    ADD CONSTRAINT `users_wallposts_fk_2` FOREIGN KEY (`to_user_id`) REFERENCES `ptb_users` (`id`) ON DELETE CASCADE;

现在,如果您想插入一个id不在其中的内容,ptb_users您将收到 SQL 错误。

有关含义的信息,请参阅此链接ON DELETE CASCADE

于 2013-04-02T18:04:34.517 回答
-1

你可以试试这个:

if(mysql_num_rows(mysql_query("SELECT id  FROM ptb_users WHERE user_id='".$_SESSION['user_id']."'"))){
        //your insert statement 
}

else{
        //not allowed 
}

我看到您正在使用 $_SESSION 变量我认为您不需要检查 user_id 是否存在于数据库中,因为最终用户无法操作 $_SESSION 变量。

于 2013-04-02T18:22:35.303 回答