Создание хранимых процедур с помощью API кода Joomla Custom Installer - PullRequest
0 голосов
/ 12 ноября 2011

Обновление: [Справочная информация: я работаю над приложением Silverlight, которое использует PHP-код для взаимодействия с базой данных MySql.У меня есть обычный установочный пакет на www.mobilesportscoach.com (демонстрационный сайт на www.mobilesportscoach.com/test), который хорошо работает, когда вы запускаете файл SQL в phpMyAdmin.Но я хочу, чтобы весь пакет можно было установить в Joomla без необходимости, чтобы люди запускали несколько сценариев в нескольких местах.]

Я создаю установочный файл xml компонентов joomla и в разделе установки хочу, чтобы он создал мойТаблицы / хранимые процедуры с помощью сценария 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 установщика, но не могу его получитьдля работы: у меня есть тег 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, я хочу, чтобы все это было в одном пакете, если это возможно ...

Ответы [ 2 ]

1 голос
/ 17 марта 2012

Одной из распространенных вещей является изменение ключевого слова 'TYPE' на 'ENGINE' (для MySQL 5.5.x), но иногда оно все равно не работает ...

Убедитесь, что файл install.sql отформатирован/ кодированный в UTF-8 без спецификации !!

1 голос
/ 18 февраля 2012

Имейте тот же вопрос и нашел его по поводу XML-файлов манифеста:

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

В разделе "Файл сценария" описано, что вам нужно.Вы должны создать специальный класс в вашем собственном установочном скрипте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...