2007-11-01

MySQL5 Procedure For PHP5

今天在編寫 MySQL5 的預存程序,稍微研究了一下,功能蠻強大的,可以讓我用來將複雜的查詢指令包裝起來,就像寫函式一樣的好用。

範例:

DELIMITER $$ -- 變更結束符號為 $$

DROP PROCEDURE IF EXISTS `getData` $$ -- 將原本有的程序刪除
-- 建立程序並設定參數屬性
CREATE PROCEDURE `getData`(id INT, uid CHAR(30))
DETERMINISTIC

BEGIN -- 程序內容起始
SELECT A.FriendUser FROM
(SELECT A.fu, A.Pri FROM A WHERE A.myid = id) AS A1
INNER JOIN
(SELECT B.fu, B.Pri FROM B WHERE B.blid = uid) AS B1
ON A1.fu = B1.fu WHERE A1.Pri >= B1.Pri ;
END $$ -- 程序內容結尾

DELIMITER ; -- 將結束符號改回 ;


執行方法 CALL getData(12,'jax');

由於 phpMyAdmin 沒有支援的工具,也不能匯入,所以只好使用指令模式匯入了,將上面的指令寫到 procedure.sql 文件中,就像寫資料庫建立文件是一樣的,再利用下面的方法將建立指令匯入。
mysql -u username -p < procedure.sql
PS:由於用這個方法匯入時,錯誤訊息的行數會以上一個結束符號為起點,所以在檢查時要看仔細一點,建議先確認程序內容是否正確,在建立預存程序。

預存程序參考文章:
樂多日誌
MySQL 5.0 Reference Manual


在 PHP5 中可以用 db_mysqli.dll 這個函示庫來存取 MySQL 預存程序,如果你也是習慣使用 Dreamweaver 來寫網頁的人,只要將所有的 mysql_xxxx() 都換成 mysqli_xxxx() 就可以了,不過還是要注意 MySQL 連線的參數方法。

$link = mysqli_connect(
'localhost', /* The host to connect to */
'root', /* The user to connect as */
'root', /* The password to use */
'db_name' /* The default database to query */
);

mysqli_query($link, "CALL getData(12,'jax')");


PHP5 參考文章:
PHP 調用 MySQL 預存程序(MySql5.0)

0 回應: