2010-06-28 25 views
0

我一直在使用MySQL一段時間,但只有基本查詢和一些連接。我想開始使用存儲過程,但是我很難找到一個很好的資源來幫助我瞭解我想知道的內容。啓動MySQL例程和腳本

我想知道的主要事情是如何在返回任何內容之前檢查整個數據庫中任何字段的值。例如:定義用戶的表格,以及定義用戶擁有權限的表格。我想在做任何事之前檢查是否有某種權限 - >用戶關係。

這裏是一個簡化的表圖:

Users: 
ID  | Username 
1  | User1 
2  | User2 
3  | User3 
N  | UserN 

Permissions: 
User ID  |  Permission ID 
1   |  1 
2   |  1 
1   |  2 
etc etc 

所以基本上,我希望把下面的僞代碼到MySQL程序:

if (SELECT * FROM Permissions WHERE 'User ID' = ? and 'Permission ID' = ? returns at least one row) { 
     execute privileged sql 
     return true 
} 
return false 

我知道我可以在這裏問了很多,但任何幫助將不勝感激!

回答

1

下面是一個例子:

drop table if exists Permissions; 

create table Permissions (
    id int, 
    username varchar(50) 
); 
insert into Permissions (id, username) 
select 1, 'Gump' 
union select 2, 'Forrest'; 

drop procedure if exists CheckPermissions; 

DELIMITER // 
CREATE PROCEDURE CheckPermissions(
    IN checkPermission int, 
    IN checkUser varchar(50), 
    IN execSql varchar(512)) 
    BEGIN 
    DECLARE declSql varchar(512); 
    IF EXISTS (SELECT * FROM Permissions p 
       WHERE p.id = checkPermission AND p.username = checkUser) 
    THEN 
    SET @declSql = execSql; 
    PREPARE stmt FROM @declSql; 
    EXECUTE stmt; 
    DEALLOCATE PREPARE stmt; 
    END IF; 
    END // 
DELIMITER ; 

call CheckPermissions(1, 'Gump', 'select 1 as PermissionOk'); 
call CheckPermissions(2, 'Gump', 'select 2 as NotExecuted'); 

此打印:

PermissionOK 
1 

程序在MySQL的使用和發展有疼痛感。例如,我不得不將SQL參數複製到一個聲明的變量,只是因爲它不起作用。該文檔不提供線索爲什麼。

如果可能的話,我會在客戶端上實現這個邏輯。

+0

感謝您的回答!我其實不會傳入SQL,而只是使用多個硬編碼的程序來處理我需要的各種數據庫函數。 – KPthunder 2010-06-28 12:08:16