只有当用户存在于数据库中时,mysql才会插入数据库?

时间:2013-04-02 17:52:17

标签: php mysql

嗨,我正在寻找一种方法来实现一个条件,在php或mysql中只有在数据库中存在'from_user_id'时才能执行下面的mysql查询?

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

用户可以在其他用户的墙上写,但在用户可以在用户墙上写/在插入查询运行之前,我希望条件与ptb_users交叉引用,以确保用户发送消息/ from_user_id存在。因此,如果用户1已登录并希望向用户2s墙发送消息,则它首先检查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);

2 个答案:

答案 0 :(得分: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中的ON DELETE CASCADE,您将收到SQL错误。

有关{{1}}

含义的信息,请参阅this link

答案 1 :(得分:-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变量。