Рекомендации по подключению к базе данных PHP

Я пишу новое приложение на PHP, которое будет опубликовано как коммерческое приложение. До этого момента я работал с базами данных MySQL в PHP.

Конечный пользователь отвечает за обеспечение функциональности базы данных, а приложение PHP просто подключается к нему и использует его.

Мой вопрос в том, что, поскольку я не знаю, какую базу данных будет использовать пользователь, как я могу поддерживать это в PHP?

У меня есть вопросы:

  • Является ли ODBC правильным путем? Я ссылаюсь на ODBC ниже, но если ODBC не является правильным методом для использования, те же вопросы относятся к любому предлагаемому методу.

  • Потеряю ли я какую-либо функциональность/функции, используя функции ODBC по сравнению с эквивалентами MySQL в PHP?

  • Есть ли что-то, связанное с безопасностью, о котором мне нужно помнить? Например, я использовал mysql_real_escape_string() в предыдущих приложениях. Что такое эквивалент ODBC (он вообще нужен?)

  • Я предполагаю, что PHP может подключаться к базе данных MySQL с помощью ODBC? Нужно ли каким-то образом настроить MySQL, чтобы разрешить это?

  • С точки зрения производительности, приемлем ли ODBC?


person psynnott    schedule 08.06.2012    source источник


Ответы (3)


Для поддержки и производительности лучшим вариантом, вероятно, будет PDO (объект базы данных PHP). Это ядро ​​PHP, которое поддерживает все основные системы баз данных, изначально обрабатывает экранирующие строки и так далее.

Чтобы оставаться агностиком, вы не можете использовать только вещи MySQL, например. LIMIT add, который поддерживается не всеми базами данных SQL.

Но, как говорится, сначала проверьте. Если клиент имеет базу данных noSQL или использует Amazon с уникальными строками подключения (например), у вас проблемы.

person Robbie    schedule 08.06.2012
comment
Я думаю, что PDO покроет большинство основ для меня. Поддерживаются MySQL, PostgreSQL, Informix, ODBC, Oracle. Я нашел это руководство по PDO полезным net.tutsplus.com/tutorials/php/ - person psynnott; 08.06.2012

Мой вопрос в том, что, поскольку я не знаю, какую базу данных будет использовать пользователь, как я могу поддерживать это в PHP?

Вот ссылка на использование абстракции базы данных в PHP.

Цель библиотеки абстракции базы данных — обеспечить единообразие при взаимодействии с несколькими серверами баз данных. Подумайте об этом таким образом, чтобы ваше приложение поддерживало несколько баз данных, ему потребуются разные строки кода для выполнения одних и тех же функций в каждой из них. С библиотекой абстракций приложению требуется только один набор кода для связи с любой базой данных, поддерживаемой библиотекой. Это резко увеличивает количество вариантов сервера базы данных, доступных для вашего PHP-приложения.

http://www.hosting.com/support/programming/using-adodb-to-build-a-database-agnostic-php-application

person Jharwood    schedule 08.06.2012
comment
Пожалуйста, предоставьте больше объяснений, а не просто ссылку в качестве ответа. - person Grigor; 08.06.2012

Я бы, вероятно, стандартизировал PDO; он абстрагирует большое количество баз данных и предоставляет унифицированный интерфейс, он написан на C, и у большинства людей он установлен по умолчанию.

Слово предостережения здесь; не все базы данных поддерживают одну и ту же грамматику SQL, поэтому вам, возможно, придется предусмотреть и это. Это сложно, но один из способов — определить вспомогательный класс между PDO и вашими классами; этот вспомогательный класс будет преобразовывать вызовы бизнес-логики в фактический SQL. Вы могли бы предоставить один, который работает для MySQL, и позволить вашим пользователям создавать другие? :)

person Ja͢ck    schedule 08.06.2012
comment
@psynnott да, я считаю, что Doctrine решает эту проблему ... но я уверен, что это не тривиально :) кстати, я добавил к своему замечанию, что PDO написан на C, а не на ADODB. Можно отметить, что ADODB - это чистый PHP, и поэтому у вас не будет зависимостей, но PDO по умолчанию используется во многих дистрибутивах :) - person Ja͢ck; 08.06.2012