2014-01-25 102 views
0

關於MySQL的更一般性問題。 我想知道可以/應該直接在SQL級別執行多少檢查。例如,我正在構建一個管理員可以發佈貼圖的論壇。 當前,發佈消息時,PHP會檢查用戶的會話以查看該用戶是否爲管理員。 我的問題是:如果user_is_admin在當前正在嘗試發佈消息的用戶的user_id爲真時,是否有一種方法可以創建只將新主題作爲sticky(stick = true)插入的INSERT查詢? 這樣做可能嗎?MySQL插入前檢查

+1

最好的軟件用戶體驗不會爲無權做出這些選擇的用戶提供選擇。 –

+0

當然。這就是爲什麼非管理員甚至不會看到這些選項。 –

+0

您可以將用戶信息作爲參數傳遞給數據庫,並在那裏執行邏輯。就我個人而言,我更喜歡在應用程序代碼中執行我的邏輯。 –

回答

1

要回答你問題的第一部分(是否有可能?),是的,這是可能的。

MySQL有一個IF函數,可以在INSERT和UPDATE語句中使用,根據語句範圍內的其他因素設置列的值。

語法是IF(expr,if_true_expr,if_false_expr),所以它的作用有點像PHP,C,Java等中的三元運算符。請參閱http://www.mysqltutorial.org/mysql-if-function.aspx

至於它是否可取,那取決於整體上下文,但通常使用特定於供應商的SQL會使應用程序的可移植性降低。此外,邏輯在PHP和SQL之間被拆分,因此可能不太容易理解和重構,對DB結構的更改會破壞SQL代碼,您不太可能意識到使用處理SQL層的MVC框架的好處你等等,所以不可取。