iT邦幫忙

0

只談MySQL (如何透過phpmyadmin上mysql的function和procedure)

【能使用phpmyadmin掛mysql的function與procedure嗎?】

問題是這樣子的
前一陣子拜讀了大大寫的好文章(只談mysql 教的function與procedure)
http://ithelp.ithome.com.tw/question/10032496
http://ithelp.ithome.com.tw/question/10032724

在自已主機上架了伺服器環境,安裝mysql gui
伺服器環境如下
winxp,
iis,
phpMyAdmin 2.3,
mysql 5.0

然後寫了很多的function 與 procedure在 mysql上跑
讓程式呼叫使用,也把整套系統開發完成了,能很順利的執行系統。

後來,到了要拿系統demo給user看時,發現了重大的問題,就是
掛在mysql上的function沒辦法透過虛擬主機廠商提供的
「phpMyAdmin 2.6.2-pl1 」掛上去,導致整個系統好像白寫的一樣

後來電話了解廠商的虛擬主機使用的是linux系統環境,目前沒提供
shell或連線的方式進主機操作mysql命令列,
而只有提供phpMyAdmin供使用,實在很苦惱,馬上user就要使用的系統
到這個節骨眼才發現要使用phpmyadmin掛mysql的function與procedure
掛不上去…

上google爬文了二個星期多了,也沒爬到半點辦法,
在此想請各位有經驗的大大看看,有沒有什麼辦法解決呀~

感謝呀~

看更多先前的討論...收起先前的討論...
賽門 iT邦超人 1 級 ‧ 2011-02-15 11:28:00 檢舉
對不起...'害'到你....汗

我研究一下再來回答....
fillano iT邦超人 1 級 ‧ 2011-02-15 11:54:55 檢舉
http://test.nth-design.com/2009/02/25/creating-sp-in-phpmyadmin/

剛剛用這個網站的說明試了一下,在我自己的phpmyadmin可以跑。但是不確定你主機商提供的phpmyadmin是否可以正確執行,你還是嘗試一下看看。
flylon iT邦新手 5 級 ‧ 2011-02-17 13:33:06 檢舉
樓上 silly 與fillano大大說的是正解,我在虛擬主機那邊加上 phpMyAdmin3.33版本就ok了,直接可以上
---- (要修改原先procedure與function中 delimiter 是「;」的地方,修改再貼上執行就可以了)
DELIMITER $$

DROP PROCEDURE IF EXISTS spFoo $$
CREATE PROCEDURE spFoo ()
BEGIN
SELECT 'Foo' FROM DUAL;
END $$

DELIMITER ;
----

真的是感謝各位大大~受教了~

謝謝大家
flylon iT邦新手 5 級 ‧ 2011-02-17 13:46:46 檢舉
此外也跟大家分享幾點認為重要的
我也試過phpmyadmin 2.XX.XX版,看來是它沒提供功能
只有phpmyadmin 3.XX版才有
此外,謎之音
上了function和procedure後,發現它目前仍沒提供一個介面可以看到你上的function和procedure
所以自已使用的話,要特別在CREATE PROCEDURE spFoo ()上加
DROP PROCEDURE IF EXISTS spFoo $$ <-- 比較好
而且要記起來上次看的procedure或fun,以防下次忘掉
日後也比較好維護

題外話:
經過此事,發現租賃的虛擬主機商其實也不是很了解這方面的功能
打了服務電話去詢問,只是一關一關的往上送,最後落到了技術人員手上
沒試出來就跟我說虛擬主機都沒提供這樣子的功能,
有點可惜,其實這功能是可以達成的,在此也提供大家在租賃虛擬主機時使用資料庫的參考
多虧各位大大的協助
再次感謝 ~

fyi

1 個回答

6
賽門
iT邦超人 1 級 ‧ 2011-02-15 11:39:47
最佳解答

看來...始作俑者是我....暈

所以, 這題非答不可...剛才到phpMyAdmin官網上看到其功能有:

•Intuitive web interface
•Support for most MySQL features:
◦browse and drop databases, tables, views, fields and indexes
◦create, copy, drop, rename and alter databases, tables, fields and indexes
◦maintenance server, databases and tables, with proposals on server configuration
◦execute, edit and bookmark any SQL-statement, even batch-queries
◦manage MySQL users and privileges
◦manage stored procedures and triggers
•Import data from CSV and SQL
•Export data to various formats: CSV, SQL, XML, PDF, ISO/IEC 26300 - OpenDocument Text and Spreadsheet, Word, Excel, LATEX and others
•Administering multiple servers
•Creating PDF graphics of your database layout
•Creating complex queries using Query-by-example (QBE)
•Searching globally in a database or a subset of it
•Transforming stored data into any format using a set of predefined functions, like displaying BLOB-data as image or download-link
•And much more...

有句: manage stored procedures and triggers

這樣說來, 應該可以掛上Function及Procedure才是, 不知版大能否供更詳細的錯誤訊息?

另外, Linux作業系統, 可能主機服務商不願意開放Telnet port....您或許可以協商看看直接到機房去掛程式, 或是請主機商的工程人員幫你掛上去, 或是開個虛擬桌面給你, 至少VNC是可以的.....

看更多先前的回應...收起先前的回應...
fillano iT邦超人 1 級 ‧ 2011-02-15 11:57:14 檢舉

在我的phpmyadmin可以跑(用SQL頁籤)。

fillano iT邦超人 1 級 ‧ 2011-02-15 12:19:21 檢舉

需要多做的就是改一下delimiter,讓他不要跟routine中的「;」衝到就可以了阿。

flylon iT邦新手 5 級 ‧ 2011-02-15 16:23:33 檢舉

我的不行說
舉例來說
-- 我寫了一個function aaa() 不管怎樣,都回傳int(100)------------------
DELIMITER $$

DROP FUNCTION IF EXISTS test1.aaa $$
CREATE DEFINER=root@localhost FUNCTION aaa() RETURNS int(11)
BEGIN

return 100;
END $$

DELIMITER ;


接著我貼到「phpMyAdmin 2.6.2-pl1」這兒,他會顯示

錯誤

SQL 語法:

DELIMITER $$ DROP FUNCTION IF EXISTS test1.aaa $$ CREATE DEFINER = root @ localhost FUNCTION aaa (
) RETURNS int( 11 ) BEGIN RETURN 100

MySQL 傳回: 說明文件
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELIMITER $$

DROP FUNCTION IF EXISTS test1.aaa $$
CREATE DEFINER=`root


附上虛擬空間
http://phpmy24872.pumo.com.tw/utf8/
帳號njplan
密碼artnutri

此外,我也試過直接
CREATE FUNCTION aaa() ...
也是不行呢

是卡到陰嗎? >_<

拜請大大解惑了 ~ 感謝您

flylon iT邦新手 5 級 ‧ 2011-02-15 16:25:02 檢舉

附註一點
DELIMITER $$ <---
delimiter也有試過使用「;」
仍然不行

silly iT邦好手 2 級 ‧ 2011-02-15 18:03:13 檢舉

phpMyAdmin版本請更新。

flylon iT邦新手 5 級 ‧ 2011-02-17 13:33:49 檢舉

樓上 silly 與fillano大大說的是正解,我在虛擬主機那邊加上 phpMyAdmin3.33版本就ok了,直接可以上
---- (要修改原先procedure與function中 delimiter 是「;」的地方,修改再貼上執行就可以了)
DELIMITER $$

DROP PROCEDURE IF EXISTS spFoo $$
CREATE PROCEDURE spFoo ()
BEGIN
SELECT 'Foo' FROM DUAL;
END $$

DELIMITER ;

真的是感謝各位大大~受教了~

謝謝大家

我要發表回答

立即登入回答