更新:[背景信息:我正在研究使用PHP代码与MySql dbase进行交互的Silverlight应用程序。我在www.mobilesportscoach.com(www.mobilesportscoach.com/test上的演示站点)上有一个常规的安装包,当您在phpMyAdmin中运行SQL文件时,它可以很好地工作。但我希望整个包可以在Joomla中安装,而不需要人们在几个地方运行几个脚本。]用Joomla自定义安装程序代码创建存储过程API
我创建了一个joomla组件xml安装文件,并且在安装部分中我希望它创建我的表/使用SQL脚本的存储过程,所以我已经试过:
<install>
<sql>
<file charset="utf8" driver="mysql">install.sql</file>
</sql>
<install>
表是没有问题的,单行SQL代码运行正常,但在我的SQL CREATE PROCEDURE语句我不得不改变分隔符(这就是它是如何工作的在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,但我无法得到它的工作: 我有一个installfile标签在我的xml: 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脚本,我想这一切在一个包,如果可能的...
你是否能够检查你使用的用户名是否被允许执行存储过程的创建? –
Joomla以root身份(本地主机测试dbase)与所有权限连接 –
您首先使用存储过程的任何原因? http://stackoverflow.com/questions/59880/are-stored-procedures-more-efficient-in-general-than-inline-statements-on-mode –