iT邦幫忙

0

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

flylon 2011-02-15 09:48:0214092 瀏覽
  • 分享至 

  • xImage

【能使用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
ckp6250 iT邦好手 1 級 ‧ 2020-03-15 05:51:56 檢舉
【發現租賃的虛擬主機商其實也不是很了解這方面的功能】

  我覺得這個不能怪他們,天底下的軟體這麼多,他們不可能全部都了解。

  他們的責任應該是保證您的租賃空間可用,如此而已。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

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 ;

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

謝謝大家

0
painsad
iT邦見習生 ‧ 2022-02-11 11:25:41

Friday Night Funkin is a fun game that allows you to play against anyone and I've always wanted to call them and just talk to them, so for me, it deserves to spread to many people. please share.

【**此則訊息已被站方移除**】
benthjanes
iT邦見習生 ‧ 2022-05-16 10:27:43
【**此則訊息已被站方移除**】

我要發表回答

立即登入回答