【发布时间】:2011-11-12 13:20:39
【问题描述】:
更新:[背景信息:我正在开发一个使用 PHP 代码与 MySql 数据库交互的 Silverlight 应用程序。我在 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 标记: 安装.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 脚本,如果可能的话,我希望它们都在一个包中...
【问题讨论】:
-
您是否能够检查您使用的用户名是否允许执行存储过程的创建?
-
Joomla 以具有所有权限的 root (localhost test dbase) 身份连接
-
你有什么理由首先使用存储过程? stackoverflow.com/questions/59880/…
-
抱歉耽搁了布伦特,我正在使用 SP,因为我的 Silverlight 应用程序使用 SP 与 MySQL 数据库通信,您可以在 www.mobilesportscoach.com/test 和 www.mobilesportscoach 上查看常规安装/应用程序.com 迈克