php - 使用 Joomla 自定义安装程序代码 API 创建存储过程

标签 php mysql joomla

更新:[背景信息:我正在开发一个 Silverlight 应用程序,它使用 PHP 代码与 MySql 数据库交互。我在 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 标签: 安装.组件.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 脚本,如果可能的话,我希望将其全部放在一个包中...

最佳答案

有同样的问题,并发现了有关 list XML 文件的信息:

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

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

关于php - 使用 Joomla 自定义安装程序代码 API 创建存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8104684/

相关文章:

mysql - 选择当前日期之后包含特定数字的行

joomla - 在菜单项类型中显示 joomla 组件

php - 修复了弹出框中不同分辨率的背景图像大小

php - 如果行存在则更新,否则将新行插入另一个表

php - 提供的参数不是有效的 MySQL

mysql - Amazon RDS MySQL 和主-主复制

php - 无法连接本地joomla数据库

php - Laravel 多对多查询关系与 where 子句

php - 使用 Facebook 应用程序对网络链接进行一次性身份验证

mysql - 如何将 MQTT Mosquitto 发布事件存储到 MySQL 中?