2013-04-02 65 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