2011-11-12 17 views
0

更新:[背景情報:私は、MySql dbaseと対話するためにPHPコードを使用する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で、私はそれがどのように動作するかそれはです(区切り文字を変更する必要が手順文を作成します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を試してみたが、私はそれを動作させることはできません。 私はXMLでinstallfileタグを持っている: 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はまったく起動されていないようですね。

私は可能であれば、私は1つのパッケージにそれをすべてしたい、ユーザーが別のSQLスクリプトを実行したくない...

+0

あなたが使用しているユーザ名がストアドプロシージャの作成を実行できるかどうかを確認できましたか? –

+0

Joomlaはすべての権限を持つroot(localhost test 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

一つの共通の事はあなたのinstall.sqlをファイルが/フォーマットされていることを確認します(MySQLの5.5.x用)「ENGINE」にキーワード「TYPE」を変更することが、時にはそれはまだ動作しません...

ですBOMなしでUTF-8でコード化されています!

+1

thnx inter I '試してみる –

関連する問題