За последние 24 часа нас посетили 20299 программистов и 1713 роботов. Сейчас ищут 1752 программиста ...

Как уйти от привязки к конкретной базе данных?

Тема в разделе "PHP и базы данных", создана пользователем torm84, 17 май 2010.

  1. torm84

    torm84 Активный пользователь

    С нами с:
    17 май 2010
    Сообщения:
    23
    Симпатии:
    0
    Собственно вопрос в заголовке. Имеется в виу что при работе с Oracle используются функции oci8, при работе с MySQL используются функции mysql, т. е. способ получения данных намертво вшит в скрипт. Есть ли какая нибудь возможность не меняя кода скрипта использовать его для работы с разными БД?
     
  2. angrybambr

    angrybambr Активный пользователь

    С нами с:
    17 май 2010
    Сообщения:
    12
    Симпатии:
    0
    вариант определить используемую базу и исходя из этого юзать определённый набор функций не годиться?
     
  3. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    PDO
    Но подход к разным СУБД - разный, так что выигрышь не особый за исключением набора методов, которыми оперируем.
     
  4. Einbaukueche

    Einbaukueche Активный пользователь

    С нами с:
    14 апр 2010
    Сообщения:
    34
    Симпатии:
    0
    Адрес:
    Там, где много гор и пива.
    Угу, и если только на уровне PDO, то придётся писать запросы, которые без изменений идут на всех поддерживаемых базах данных, так как ничего "недостающего" PDO не эмулирует и возможностей не добавляет. Это как минимум надо серьёзно разбиратся во "всех" базах данных, SQL стандарте итд. итд.. И про оптимизацию путём формулировки запроса можно забыть. Насколько это реально сделать и выдержать на протяжении большого проэкта - фиг знает.

    Другой, работающий, вариант - использовать ещё одну "прослойку" поверх. Doctrine например более или менее эмулирует недостающие базовые фишки (тот же злосчастный LIMIT :) ). Но, это надо разбираться в Doctrine, писать все запросы в специальном диалекте DQL, да и Doctrine сама весит недурно и тормозит итд., ORM фреймворк всё-таки.
     
  5. torm84

    torm84 Активный пользователь

    С нами с:
    17 май 2010
    Сообщения:
    23
    Симпатии:
    0
    2angrybambr
    Вариант определиться с БД не подходит. Есть несколько разных баз которые по своей логике работают как одна.

    2Apple и 2Einbaukueche
    Спасибо за совет, в принципе как раз и требовалось абстрагироваться на уровне функций, что бы они были одинаковыми для MySQL, Oracle и т. д. В этом случае при переходе на другую базу изменения в коде будут на два порядка меньше и проще.


    Если не сложно посоветуйте какой нибудь хороший туториал или книжку по PDO, т. к. для себя выбрал именно его.
    А вообще нашел статью со сравнениями разных классов абстракции от БД http://codeshit.com/post397 , надеюсь кому нибудь поможет.
     
  6. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Глупости это.

    Основные изменения будут связаны с самими запросами.
    Синтаксис которых у разных БД отличается. Поэтому только ORM, а PDO тут и рядом не стоял.
     
  7. torm84

    torm84 Активный пользователь

    С нами с:
    17 май 2010
    Сообщения:
    23
    Симпатии:
    0
    Понимаю что тотально абстрагироваться не получится, но это все же лучше чем ничего. К тому же все запросы достаточно простые, аля SELECT.

    Ну а всетаки киньте пожалуйста ссылочку на хорошую документацию по PDO.
     
  8. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    Simpliest
    орм тоже в некотором смысле не подходит.
    поэтому разные модели, всё решат
     
  9. Mr.M.I.T.
    ты о чем ваще?
     
  10. Einbaukueche

    Einbaukueche Активный пользователь

    С нами с:
    14 апр 2010
    Сообщения:
    34
    Симпатии:
    0
    Адрес:
    Там, где много гор и пива.
    Само понятие ORM тут вообще ни при чём, нужна абстракция языка запросов. Например тот же Doctrine Query Language из Doctrine.


    SELECT это вообще, пожалуй, запрос с самым больших количеством опций. :D

    Понимаете, вам правильно сказали на этот счёт. Даже самые на первый взгляд элементарные запросы нельзя будет использовать 1:1 на всех базах данных, поддерживаемых PDO. И это даже не вопрос разных типов данных итд..

    Такие банальные и по привычке для MySQL набросанные вещи как
    Не являются "кроссплатформенным" SQL. Погуглите, сколько людей ищут тот же LIMIT на Оракле, или ROWNUM на MySQL. Ибо кажется просто, и "везде должно быть", а там раз и облом :D

    На php.net сходить достаточно, имхо. Там читать-то не так много, за рабочий день можно всё осилить и весь фунционал перепробовать. Те моменты, которые в документации не так ясны, разжёванны в комментах.
    http://php.net/manual/en/book.pdo.html
     
  11. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    флоппик
    о моделях данных, не?
     
  12. Goryn

    Goryn Активный пользователь

    С нами с:
    4 апр 2006
    Сообщения:
    398
    Симпатии:
    0
    Адрес:
    Ярославль
    Подключаться к БД с помощью ODBC php-ный скрипт писать под ODBC соедиение. Изврат конечно, но решает проблему работы с разными базами.
     
  13. torm84

    torm84 Активный пользователь

    С нами с:
    17 май 2010
    Сообщения:
    23
    Симпатии:
    0
    А по PDO что нибудь на русском есть?
     
  14. torm84

    torm84 Активный пользователь

    С нами с:
    17 май 2010
    Сообщения:
    23
    Симпатии:
    0
    Всем спасибо за советы, если кому понадобится, нашел книжку(правдо только в печатном виде), называется PHP и MySQL: создание интернет-магазина, 2-е издание Кристиан Дари, Эмилиан Баланеску.
    В ней описана работа с PDO + Smarty(позволяет разделить дизайн и код приложения) + ООП + трехуровнивая модель разработки, на примере создания интернет магазина. В принципе получил больше чем заказывал, на этом тему считаю ЗАКРЫТОЙ.