Разработка сайта для Вашего бизнеса. Веб дизайн. Дизайн логотипа, фирменного стиля, рекламная фотография . Комплексный рекламный креатив.

Ralex. We do the work.
На рынке с 1999го года. Средняя ценовая категория. Ориентация на эффективность решений.
Ознакомтесь с нашим портфолио
Узнайте больше о услугах
Свяжитесь с нами:
E-mail: [email protected]
Tel: (044) 587 - 84 - 78
Custom web design & дизайн и разработка сайта "под ключ"
Креативный, эффективный дизайн. Система управления сайтом (СУС).
Custom flexible разработка систем электронной коммерции
Система e-commerce разрабатывается под индивидуальные потребности. Гибкая функциональность.
Search Engine Optimzation & оптимизация под поисковые системы (SEO)
Постоянная оптимизация и мониторинг сайта в поисковых системах. Достигаем результата быстро и эффективно
Custom logo design & дизайн логотипа и фирменного стиля
Многолетний опыт. Огромное портфолио. Уникальное предложение и цена.
профессиональная рекламная фотография
креативно, смело, качественно
Custom logo design & рекламный креатив. дизайн рекламы
Многолетний опыт. Огромное портфолио. Уникальное предложение и цена.

Порада: Створення переносяться уявлень баз даних за допомогою пакета MDB2_Schema зі сховищ PEAR

  1. Серія контенту:
  2. Цей контент є частиною серії: Рада
  3. установка
  4. Робота через графічний інтерфейс
  5. Малюнок 1. Web-інтерфейс для експортування та імпортування XML-представлення бази даних
  6. Малюнок 2. Заповнена Web-форма
  7. Лістинг 1. Приклад опису бази даних MySQL у вигляді XML
  8. Малюнок 3. Налагоджувальний висновок скрипта при створенні бази даних PostgreSQL з XML-опису
  9. Лістинг 2. Скрипт на PHP, що генерує опис бази даних у вигляді XML
  10. Лістинг 3. Скрипт на PHP, що виконує імпорт XML-опису бази даних
  11. зауваження
  12. Ресурси для скачування

Наша взаимовыгодная связь https://banwar.org/

Порада

Перенесення об'єктів баз даних між різними СУБД за допомогою PHP

Серія контенту:

Цей контент є частиною # з серії # статей: Рада

https://www.ibm.com/developerworks/ru/views/global/libraryview.jsp?series_title_by=Совет

Слідкуйте за виходом нових статей цієї серії.

Цей контент є частиною серії: Рада

Слідкуйте за виходом нових статей цієї серії.

Якщо у вас є досвід роботи з різними базами даних на різних платформах, то, швидше за все, вам знайомі труднощі, з якими пов'язаний перенесення додатків з однієї реляційної СУБД (РСУБД) на іншу. Різні РСУБД не тільки підтримують різні підмножини стандартів SQL-92 і SQL-99, а й часто використовують власні розширення і доповнення SQL.

Перехід на нову РСУБД вимагає ретельного аналізу всього коду програми на предмет використання нестандартних можливостей SQL і функцій, специфічних для конкретної РСУБД. Подібні ділянки додатки доводиться переписувати з урахуванням можливостей нової РСУБД. Іноді це зробити легко, наприклад, якщо потрібно тільки виправити типи даних для полів, але може бути і дуже складно, якщо потрібно переписувати SQL-запити і процедури в більш зручному для механізму нової БД форматі. Крім того, може знадобитися зміна конфігураційних налаштувань і змінних бази даних для оптимізації роботи під новою РСУБД.

MDB2_Schema - PHP-пакет з репозиторію PEAR (PHP Extension and Application Repository) - покликаний частково позбавити розробників від рутинної роботи по перенесенню додатки між РСУБД. Пакет надає спеціальний API, що дозволяє зберегти суті і записи бази даних в нейтральному XML-форматі, а потім на основі цього XML-вистави відтворити базу даних і запису в новій РСУБД. MDB2_Schema підтримує більшість популярних РСУБД і тому надає простий і ефективний спосіб швидкого перенесення даних в нову систему.

установка

Пакет MDB2_Schema підтримується Ельги Пормаром (Helgi Pormar), Ігорем Фегалі (Igor Feghali) і Давидом Кольєром (David Coallier). Він випущений під ліцензією BSD і вимагає для своєї роботи PHP версії 4.2.0 або вище. Найпростіше пакет встановлюється за допомогою автоматичного інсталятора PEAR, який входить в стандартну поставку PHP. Для установки виконайте наступну команду з командного рядка:

shell> pear install MDB2_Schema

Інсталятор з'єднається з сервером пакетів PEAR, завантажить пакет і встановить його в відповідне місце на диску. У даній статті використовується MDB2_Schema V. 0.7.2.

Пакет можна також встановити вручну. Для цього треба зайти на головну сторінку проекту, завантажте архів з вихідним кодом і розпакуйте його в потрібне місце на диску. Даний процес має на увазі знайомство з організаційною структурою пакетів PEAR.

MDB2_Schema залежить від двох інших пакетів з PEAR: XML_Parser і MDB2, необхідного для створення абстрактного уявлення бази даних. MDB2, в свою чергу, вимагає наявності драйверів і розширень PHP, специфічних для конкретних СУБД. До моменту написання даної статті існували MDB2-драйвери для наступних СУБД: MySQL, SQLite, PostgreSQL, Firebird, Interbase, MS-SQL і Oracle. У прикладах ми будемо використовувати драйвери для MySQL і PostgreSQL. Всі перераховані вище пакети можуть бути встановлені стандартним інсталятором PEAR або вручну. В останньому випадку пакети можна знайти за посиланнями в розділі ресурси .

У даній статті ми продемонструємо використання пакета MDB2_Schema на прикладі портирования бази даних world з поставки MySQL на PostgreSQL. Сама база даних містить різні пов'язані таблиці, заповнені даними про міста і країни. Для коректної роботи прикладу необхідно встановити MySQL і PostgreSQL, а також базу даних world. Інструкції по установці можна знайти в розділі ресурси .

Робота через графічний інтерфейс

Почати працювати з MDB2_Schema найпростіше за допомогою скрипта example.php, включеного в поставку пакету. Цей скрипт надає Web-інтерфейс для створення, імпортування та зміни XML-опису бази даних під конкретну СУБД. Для установки скрипта просто скопіюйте його в будь-який каталог в кореневій директорії вашого Web-сервера.

Інтерфейс форми показаний на малюнку 1.

Малюнок 1. Web-інтерфейс для експортування та імпортування XML-представлення бази даних
Порада   Перенесення об'єктів баз даних між різними СУБД за допомогою PHP   Серія контенту:   Цей контент є частиною # з серії # статей: Рада   https://www

Для експорту опису бази даних world з поставки MySQL в XML введіть необхідні параметри доступу до сервера MySQL в поля форми і натисніть ОК. Як правило, для опції Dump має бути вибрано значення All. Крім того, має сенс включити режим налагодження (опція Debug).

Заповнена форма показана на малюнку 2.

Малюнок 2. Заповнена Web-форма

Далі скрипт встановить з'єднання з базою даних MySQL, використовуючи введені параметри доступу, згенерує опису сутностей і даних у вигляді XML і збереже їх у файлі на диску. Фрагмент такого файлу наведений в лістингу 1 .

Лістинг 1. Приклад опису бази даних MySQL у вигляді XML

<? Xml version = "1.0" encoding = "ISO-8859-1"?> <Database> <name> world </ name> <create> true </ create> <overwrite> false </ overwrite> <table> < name> city </ name> <declaration> <field> <name> ID </ name> <type> integer </ type> <length> 4 </ length> <notnull> true </ notnull> <default> 0 < / default> <autoincrement> 1 </ autoincrement> </ field> <field> <name> Name </ name> <type> text </ type> <length> 35 </ length> <notnull> true </ notnull> <fixed> true </ fixed> <default> </ default> </ field> ... <index> <name> idx_ccode </ name> <field> <name> CountryCode </ name> <sorting> ascending </ sorting> </ field> </ index> ... </ declaration> <initialization> <insert> <field> <name> ID </ name> <value> 1 </ value> </ field> <field> < name> Name </ name> <value> Kabul </ value> </ field> <field> <name> CountryCode </ name> <value> AFG </ value> </ field> <field> <name> District < / name> <value> Kabol </ value> </ field> <field> <name> Population </ name> <value> 1780000 </ value> </ field> </ insert> ... </ initialization> < / table> <table> ... </ table> </ database>

Тут доречно буде дати короткий опис формату, використовуваного MDB2_Schema для створення XML-уявлень. Кожна таблиця в базі даних описується елементом <table>, що має два основних дочірніх елемента:

  • <Declaration>, що містить опису полів і індексів.
  • <Initialization>, що містить дані таблиці. Кожен запис в таблиці представлена ​​елементом <insert>, що знаходиться всередині елемента <initialization>.

Після того як опис бази даних у вигляді XML згенеровано, його можна імпортувати в іншу РСУБД за допомогою того ж Web-інтерфейсу скрипта example.php. Для цього треба ввести параметри доступу для цільової РСУБД, шлях до файлу, який містить XML-опис вихідної бази даних, включити опцію створення бази даних (Create) і режим відладки. Після цього можна запустити імпортування. Пакет MDB2_Schema прочитає і проаналізує XML-опис, створить таблиці з усіма необхідними полями і заповнить їх даними. Результат створення бази даних PostgreSQL з раніше згенерованого XML-опису показаний на малюнку 3.

Результат створення бази даних PostgreSQL з раніше згенерованого XML-опису показаний на малюнку 3.

Малюнок 3. Налагоджувальний висновок скрипта при створенні бази даних PostgreSQL з XML-опису

Робота через MDB2_Schema API

Незважаючи на зручність роботи через візуальний інтерфейс, іноді необхідно використовувати пакет MDB2_Schema безпосередньо з програми на PHP. Програмне генерування XML-описів і створення баз даних на основі XML робляться нескладно. Приклад коду на PHP, що генерує XML-представлення бази даних з її вмістом за допомогою MDB2_Schema, приведений в лістингу 2.

Лістинг 2. Скрипт на PHP, що генерує опис бази даних у вигляді XML

<? Php set_time_limit (0); // включення класу include_once 'MDB2 / Schema.php'; // Ініціалізація з'єднання MDB з базою даних // Конфігурація файлового виводу $ options [ 'output_mode'] = 'file'; $ Options [ 'force_defaults'] = true; $ Schema = MDB2_Schema :: factory (MDB2 :: factory ( 'mysql: // root @ localhost / world'), $ options); // отримання опису об'єктів бази даних $ data = $ schema-> getDefinitionFromDatabase (); if ($ data instanceof MDB2_Error) {die ($ data-> getMessage (). ':'. $ data-> getUserInfo ()); } // запис структури і вмісту бази даних в файл $ options [ 'output'] = '/tmp/all.xml'; $ Ret = $ schema-> dumpDatabase ($ data, $ options, MDB2_SCHEMA_DUMP_ALL); if ($ ret instanceof MDB2_Error) {die ($ ret-> getMessage (). ':'. $ ret-> getUserInfo ()); } Else {echo 'Database structure and contents successfully dumped to /tmp/all.xml. <br /> '; } // запис тільки структури $ options [ 'output'] = '/tmp/structure.xml'; $ Ret = $ schema-> dumpDatabase ($ data, $ options, MDB2_SCHEMA_DUMP_STRUCTURE); if ($ ret instanceof MDB2_Error) {die ($ ret-> getMessage (). ':'. $ ret-> getUserInfo ()); } Else {echo 'Database structure successfully dumped to /tmp/structure.xml. <br /> '; } // запис тільки даних $ options [ 'output'] = '/tmp/content.xml'; $ Ret = $ schema-> dumpDatabase ($ data, $ options, MDB2_SCHEMA_DUMP_CONTENT); if ($ ret instanceof MDB2_Error) {die ($ ret-> getMessage (). ':'. $ ret-> getUserInfo ()); } Else {echo 'Database contents successfully dumped to /tmp/content.xml. &lt;br /> '; }?>

В лістингу 2 спочатку включається необхідне визначення класу з MDB2_Schema, а потім відбувається ініціалізація шару абстракції MDB2 за допомогою виклику методу factory (). У цей метод передається рядок DSN, що містить параметри доступу до продукції, що експортується базі даних. Отриманий екземпляр MDB2 далі використовується для ініціалізації примірника MDB2_Schema, який зберігається в змінній $ schema.

Після створення об'єкта MDB2_Schema залишається виконати два простих кроки, щоб згенерувати опис даних у вигляді XML. Спочатку викликається метод getDefinitionFromDatabase (), який повертає визначення об'єктів бази даних, а потім - dumpDatabase (), що виконує запис сутностей і даних в XML-файл. Ім'я та шлях до вихідного файлу задаються по ключу output в асоціативному масиві $ options, який передається в метод dumpDatabase () в якості другого аргументу. Третім аргументом методу є константа, яка визначає режим експортування: тільки сутності (MDB2_SCHEMA_DUMP_STRUCTURE), тільки дані (MDB2_SCHEMA_DUMP_CONTENT) або і те, і інше (MDB2_SCHEMA_DUMP_ALL).

Необхідно сказати декілька слів про масиві $ options, переданому в метод factory () з MDB2_Schema. У цьому масиві встановлюються різні опції, що визначають режим експортування бази даних і вихідний уявлення. Наприклад, ключ output_mode визначає, чи треба записувати значення, що повертається методом dumpDatabase (), в файл, або треба передати його в PHP-функцію, а ключ output задає шлях до файлу або ім'я функції. В лістингу 2 ключ output_mode має значення file, тому створюються файли all.xml, structure.xml і content.xml, але з таким же успіхом можна визначити якусь функцію і передати їй результат виконання dumpDatabase () для подальшої обробки.

Створення бази даних з XML-опису (навіть в інший РСУБД) робиться навіть простіше, ніж генерація опису. У лістингу 3 показаний процес читання згенерованого опису і конвертації його в базу даних PostgreSQL.

Лістинг 3. Скрипт на PHP, що виконує імпорт XML-опису бази даних

<? Php set_time_limit (0); // включення класу include 'PEAR / MDB2 / Schema.php'; // ініціалізація з'єднання MDB з базою даних $ schema = MDB2_Schema :: factory (MDB2 :: factory ( "pgsql: // postgres: postgres @ localhost / world")); // розбір файлу опису $ data = $ schema-> parseDatabaseDefinitionFile ( '/ tmp / structure.xml'); if ($ data instanceof MDB2_Schema_Error) {die ($ data-> getMessage (). ':'. $ data-> getUserInfo ()); } Else {echo 'Database definition parsed. <br /> '; } // створення бази даних $ ret = $ schema-> createDatabase ($ data); if ($ ret instanceof MDB2_Error) {die ($ ret-> getMessage (). ':'. $ ret-> getUserInfo ()); } Else {echo 'Database schema successfully imported. &lt;br /> '; }?>

Спочатку відбувається ініціалізація примірника класу MDB2_Schema, якому передається об'єкт MDB2, що описує цільову базу даних (в даному випадку PostgreSQL). Після цього метод parseDatabaseDefinitionFile () читає XML-опис і зберігає його у змінній $ data, а потім метод createDatebase () створює всі об'єкти бази даних і наповнює їх даними.

Виконання скрипта може займати тривалий час, особливо в разі великих або складних баз даних, тому на початку лістингу 3 відбувається виклик set_time_limit (0). Як тільки скрипт завершиться, можна відкрити ваш улюблений клієнт для PostgreSQL і переконатися, що дані були перенесені коректно.

postgres- # \ c world Password for user "postgres": You are now connected to database "world". world- # \ dt List of relations Schema | Name | Type | Owner -------- + ----------------- + ------- + ---------- public | city ​​| table | postgres public | country | table | postgres public | countrylanguage | table | postgres (3 rows) world = # SELECT * FROM city; id | name | countrycode | district | population ---- + ----------- + ------------- + ------------------ ---- + ------------ 1 | Kabul | AFG | Kabol | 1780000 2 | Qandahar | AFG | Qandahar | 237500 ...

зауваження

Незважаючи на те, що MDB2_Schema працює досить успішно з більшістю популярних баз даних, включаючи MySQL, PostgreSQL і SQLite, необхідно пам'ятати, що це все-таки автоматичне засіб, і, отже, воно схильний до помилок. Наприклад, помилки можуть виникати при перенесенні даних полів типу TIMESTAMP або DATE, для яких не визначено значення за замовчуванням. В цьому випадку при виклику методу parseDatabaseDefinitionFile () можливе виникнення помилок при обробці елементів <default>. Єдиний спосіб вирішення цієї проблеми - це ручне зміна XML-опису з урахуванням особливостей синтаксису цільової РСУБД.

Як видно з наведених лістингів, пакет MDB2_Schema дозволяє легко і безпечно переміщати дані між різними РСУБД. Незважаючи на те, що це недосконале рішення, і в деяких випадках може знадобитися ручна робота, пакет є ефективною альтернативою ручному перенесенню таблиць і написання SQL-коду для експорту / імпорту записів з однієї бази даних в іншу. Спробуйте його використовувати в наступний раз, коли вам доведеться переносити базу даних, і подивіться, що вийде!

Ресурси для скачування

Схожі теми

  • Оригінал статті: Tip: Create portable database representations with PEAR MDB2_Schema . (EN)
  • Зверніться до документації по MDB2 , В якій наведено прекрасний огляд API MDB2 для трансформування записів, отриманих за допомогою оператора SQL SELECT, в дані XML (EN).
  • Слідкуйте за новинами розробки API MDB2 для всіх підтримуваних РСУБД (EN).
  • Зверніться до сховища PEAR , Що містить безліч матеріалів, корисних для розвитку навичок роботи з XML.
  • відвідайте розділ XML сайту developerWorks Росія, що містить безліч матеріалів, корисних для поліпшення навичок роботи з XML.
  • Сертифікація по XML корпорації IBM : Дізнайтеся, як стати сертифікованим розробником IBM в області XML і пов'язаних з ним технологій. (EN)
  • Скачайте ознайомчі версії програмного забезпечення IBM : Використовуйте у вашому наступному проекті ознайомчі версії ПЗ, які можна скачати прямо з сайту IBM developerWorks (EN).
  • пакет MDB2_Schema : Експорт баз даних у вигляді файлів XML, що не залежать від РСУБД. Це подання можна використовувати для створення, зміни або видалення сутностей, а також вставки записів в бази даних (EN).
  • MDB2 : Скачайте пакет, що є поєднанням абстрактних шарів PEAR DB і Metabase. Пакет надає уніфікований API для всіх підтримуваних РСУБД (EN).
  • драйвер MySQL : Скачайте драйвер MySQL для пакета PEAR MDB2 (EN).
  • драйвер PostgreSQL : Скачайте драйвер PostgreSQL для пакета PEAR MDB2 (EN).
  • Демонстраційна база даних world для MySQL : Скачайте інструкції по завантаженню та встановіть базу даних, що містить дані про країни, міста і мовами (EN).
  • IBM DB2® Enterprise 9 : Скачайте ознайомчу версію DB2 9 або DB2 Express-C 9 - безкоштовну версію сервера DB2 Express 9. (EN)

Підпишіть мене на повідомлення до коментарів

Jsp?
Encoding = "ISO-8859-1"?
Lt;br /> '; }?
Lt;br /> '; }?
Категории
  • Биология
  • Математика
  • Краеведению
  • Лечебная
  • Наука
  • Физике
  • Природоведение
  • Информатика
  • Новости

  • Новости
    https://banwar.org/
    Наша взаимовыгодная связь https://banwar.org/. Запустив новый сайт, "Пари Матч" обещает своим клиентам незабываемый опыт и возможность выиграть крупные суммы.


    Наши клиенты
    Клиенты

    Быстрая связь

    Тел.: (044) 587-84-78
    E-mail: [email protected]

    Имя:
    E-mail:
    Телефон:
    Вопрос\Комментарий: