2007-11-01 22:32

MySQL5 Procedure For PHP5

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

範例:
  1. DELIMITER $$ -- 變更結束符號為 $$ 
  2.  
  3. DROP PROCEDURE IF EXISTS `getData` $$ -- 將原本有的程序刪除 
  4. -- 建立程序並設定參數屬性 
  5. CREATE PROCEDURE `getData`(id INT, uid CHAR(30)) 
  6.   DETERMINISTIC 
  7.  
  8. BEGIN -- 程序內容起始 
  9.   SELECT A.FriendUser FROM 
  10.      (SELECT A.fu, A.Pri FROM A WHERE A.myid = id) AS A1 
  11.   INNER JOIN 
  12.      (SELECT B.fu, B.Pri FROM B WHERE B.blid = uid) AS B1 
  13.   ON A1.fu = B1.fu WHERE A1.Pri >= B1.Pri ; 
  14. END $$ -- 程序內容結尾 
  15.  
  16. 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 連線的參數方法。
  1. $link = mysqli_connect( 
  2.   'localhost', /* The host to connect to */ 
  3.   'root', /* The user to connect as */ 
  4.   'root', /* The password to use */ 
  5.   'db_name' /* The default database to query */ 
  6. ); 
  7.  
  8. mysqli_query($link, "CALL getData(12,'jax')"); 


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

0 回應: