2011-11-12 76 views
0

更新:[背景信息:我正在研究使用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腳本,我想這一切在一個包,如果可能的...

+0

你是否能夠檢查你使用的用戶名是否被允許執行存儲過程的創建? –

+0

Joomla以root身份(本地主機測試dbase)與所有權限連接 –

+0

您首先使用存儲過程的任何原因? http://stackoverflow.com/questions/59880/are-stored-procedures-more-efficient-in-general-than-inline-statements-on-mode –

回答

1

有同樣的問題,發現這個約清單XML文件:

http://docs.joomla.org/Manifest_files#Script_file

有一段描述你所需要的「腳本文件」。您必須在自定義安裝程序腳本中創建一個特殊的類。

+0

thnx您的回覆,我會研究它;) –

1

一個常見的是要改變關鍵字「類型」爲「引擎」(針對MySQL的5.5.x),但有時它仍然無法正常工作......

確保您install.sql文件的格式/使用UTF-8編碼,無需BOM!

+1

thnx inter I'我會試試看 –