更新:[背景信息:我正在使用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脚本,如果可能,我希望将它们全部放在一个包中......
答案 0 :(得分:1)
有相同的问题,并发现有关清单XML文件:
http://docs.joomla.org/Manifest_files#Script_file
有一个“脚本文件”部分描述了您的需求。您必须在自定义安装程序脚本中创建一个特殊类。
答案 1 :(得分:1)
一个常见的事情是将关键字'TYPE'更改为'ENGINE'(对于MySQL 5.5.x),但有时它仍然不起作用...
确保您的install.sql文件格式化/编码为UTF-8,没有BOM !!