更新:[背景信息:我正在研究使用PHP代碼與MySql dbase進行交互的Silverlight應用程序。我在www.mobilesportscoach.com(www.mobilesportscoach.com/test上的演示站點)上有一個常規的安裝包,當您在phpMyAdmin中運行SQL文件時,它可以很好地工作。但我希望整個包可以在Joomla中安裝,而不需要人們在幾個地方運行幾個腳本。]用Joomla自定義安裝程序代碼創建存儲過程API
我創建了一個joomla組件xml安裝文件,並且在安裝部分中我希望它創建我的表/使用SQL腳本的存儲過程,所以我已經試過:
<install>
<sql>
<file charset="utf8" driver="mysql">install.sql</file>
</sql>
<install>
表是沒有問題的,單行SQL代碼運行正常,但在我的SQL CREATE PROCEDURE語句我不得不改變分隔符(這就是它是如何工作的在MySQL中),例如:
DELIMITER $$
CREATE PROCEDURE `tp_delete_match_and_scores_onmatchid`(IN matchid VARCHAR(10))
BEGIN
DELETE FROM tp_scores WHERE (tp_scores.matchid=matchid);
DELETE FROM tp_matches WHERE (tp_matches.recid=matchid);
END$$
DELIMITER ;
擴展安裝程序給我:
JInstaller: :Install: Error SQL DB function failed with error number 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 $$
我也試着自定義安裝程序的API,但我無法得到它的工作: 我有一個installfile標籤在我的xml: install.component.php
我的PHP:
<?php
function com_install(){
global $database;
echo "TEST COM_INSTALL";
//get database
if(defined('_JEXEC')){
//joomla 1.5
$database = JFactory::getDBO();
}
//table for item index
$query = "CREATE PROCEDURE `tp_delete_match_and_scores_onmatchid`(IN matchid VARCHAR(10)";
$query .= "\nBEGIN";
$query .= "\nDELETE FROM tp_scores WHERE (tp_scores.matchid=matchid);";
$query .= "\nDELETE FROM tp_matches WHERE (tp_matches.recid=matchid);";
$query .= "\nEND";
$database->setQuery($query);
$database->query();
?>
的組件安裝好了,但我無法找到我與phpMyAdmin程序/未創建。 似乎install.component.php沒有被解僱?
我不希望用戶運行一個單獨的SQL腳本,我想這一切在一個包,如果可能的...
你是否能夠檢查你使用的用戶名是否被允許執行存儲過程的創建? –
Joomla以root身份(本地主機測試dbase)與所有權限連接 –
您首先使用存儲過程的任何原因? http://stackoverflow.com/questions/59880/are-stored-procedures-more-efficient-in-general-than-inline-statements-on-mode –