2013-04-02 34 views
0

嗨即时通讯寻找一种方式来实现一个条件,无论是在PHP或MySQL,只有在数据库中存在'from_user_id'时,才能执行下面的mysql查询吗?只有当用户存在于数据库中时,mysql才会插入到数据库中?

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

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

因此,例如我不希望人们通过能够具有0的from_user_id将数据注入到数据库中,它必须与数据库中的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

您可以首先'SELECT ... user',如果您没有NULL值,请执行'INSERT'。 – zipser

+1

首先,确保为from_user_id,to_user_id创建一个外键给用户的表,然后显示一个友好的消息,你可以做一个选择为zipser – Akash

+0

我将如何构建我的SELECT语句我试过这个:$ sql =“ SELECT user_id FROM ptb_users WHERE ptb_users.user_id = ptb_wallposts.from_user_id“; \t \t \t \t如果(!$ SQL) \t \t \t $ SQL2 = “INSERT INTO ptb_wallposts(ID,from_user_id,to_user_id,内容)VALUES(NULL,“”。$ _ SESSION [ 'user_id的']'。“, '“。$ profile_id。”','“。$ content。”');“; \t \t \t mysql_query($ sql,$ connection); –

回答

-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变量不能由最终用户操作。

+0

我可以添加到这里来说和AND WHERE ptb_wallposts.from_user_id是不是NULL?所以人们不能破解它并添加0的user_id? –

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错误。

的信息,请参阅this link上的ON DELETE CASCADE

+0

我试过了,但是它出现了一个sql错误: –

+0

#1452 - 无法添加或更新子行:外键约束失败('ptb2013 /#sql-22b9_26f4d4',CONSTRAINT'users_wallposts_fk_1' FOREIGN KEY('from_user_id' )参考'ptb_users'('id')ON DELETE CASCADE) –

+0

您目前有无效条目吗? ([创建关系:#1452 - 无法添加或更新子行:外键约束失败](http://stackoverflow.com/questions/7274494/creating-relations-1452-cannot-add-or-update-a -child-row-a-foreign-key-cons) – kero