2011-11-12 40 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'我会试试看 –