嗨,我正在寻找一种方法来实现一个条件,在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);
答案 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变量。