網頁

2012年9月28日 星期五

以預存程序做資料庫查詢

筆者曾在以具名參數實做資料庫新增修改刪除 文章中介紹了具名參數,及其應用的方法......

固然使用具名參數可以減低SQL Injection(SQL 隱碼)的風險,但要加強存取資料庫時的安全性,可以改用預存程序存取資料。
雖然微軟官方網站建立預存程序已經說明了如何使用SQL SERVER的預存程序,但SQL SERVER和MySQL的預存程序語法有些微差異,容易造成混淆,因此筆者將兩種資料庫預存程序列出語法作比較。

SQL SERVER版本:
//指定使用bookstore資料庫
USE bookstore;
GO

//建立select_books預存程序
CREATE PROCEDURE select_books

//定義傳入的具名參數名稱與資料型別,SQL SERVER以@辨別具名參數
@booksname varchar(50), 
 @booksprice int(10) 

//SQL SERVER以AS開始下SQL指令,以GO做結尾不需加分號(;) 
AS

//下SQL指令
SELECT booksname, booksprice 
 FROM books 
 WHERE booksname = @booksname AND booksprice = @booksprice 
GO


MySQL版本:
//MySQL預存程序建立在各資料庫內,因此無須宣告將使用的資料庫

//由root登入localhost建立select_books預存程序(MySQl為TCP/IP登入驗證) 
CREATE DEFINER=`root`@`localhost` PROCEDURE `select_books`

//定義傳入具名參數名稱的具名參數資料型別並用()區隔,
//MySQL具名參數中不可使用@,?等特殊符號,筆者使用相近的字詞作為具名參數名稱
(
p_booksname varchar(50),
 p_booksprice int(10) 
)

//MySQL以BEGIN開始下SQL指令,以END作結尾需加分號(;)
BEGIN 

//下SQL指令
SELECT booksname, booksprice
FROM books
WHERE booksname = p_booksname AND booksprice = p_booksprice;
END
從上面兩個範例看得出來,語法其實大同小異,但是差異頗多,在使用上要多加注意,不要用錯

沒有留言:

張貼留言