使用Joomla Custom Installer代码API创建存储过程

时间:2011-11-12 13:20:40

标签: php mysql joomla

更新:[背景信息:我正在使用Silverlight应用程序,该应用程序使用PHP代码与MySql dbase进行交互。我在www.mobilesportscoach.com(www.mobilesportscoach.com/test上的演示站点)上有一个常规安装包,当你在phpMyAdmin中运行SQL文件时,它运行良好。但我希望整个软件包可以在Joomla中安装,而无需人们在几个地方运行多个脚本。]

我正在创建一个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根本没有被解雇?

我不希望用户运行单独的sql脚本,如果可能,我希望将它们全部放在一个包中......

2 个答案:

答案 0 :(得分:1)

有相同的问题,并发现有关清单XML文件:

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

有一个“脚本文件”部分描述了您的需求。您必须在自定义安装程序脚本中创建一个特殊类。

答案 1 :(得分:1)

一个常见的事情是将关键字'TYPE'更改为'ENGINE'(对于MySQL 5.5.x),但有时它仍然不起作用...

确保您的install.sql文件格式化/编码为UTF-8,没有BOM !!