更新:[背景信息:我正在开发一个 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/