Зачем мне делать оболочку базы данных?

Мне действительно интересно, зачем мне нужна оболочка базы данных для PHP. Как оболочка для MySQLi или PDO. Это класс, который вызывает класс PDO/MySQLi. Зачем мне это нужно? Преимущества? Попробую сделать - только не понимаю основной цели. Зачем мне это нужно?? знак равно


person daGrevis    schedule 09.02.2011    source источник
comment
PDO уже является оберткой. Вы можете расширить класс, добавив несколько вещей, которые вам нужны, но не предусмотрены, но в остальном создание собственной оболочки с нуля является довольно сложной задачей.   -  person Marc B    schedule 10.02.2011


Ответы (4)


Такие абстракции, как PDO, призваны сделать вещи более безопасными. Вы могли бы сказать, что выполнение базы данных, которое вы хотите выполнить, будет «строго типизированным», что означает, что что-то подобное будет предотвращено:

$myDangerousSql = "select * from dbA where x ='"+$someVariable+"'";

Вышеприведенное может привести к тому, что называется sql-injection.

При использовании PDO вы явно говорите, что «x будет иметь тип string» или любой другой тип, который вы используете в своей базе данных. Таким образом, оператор может быть "подготовлен" и, таким образом, вы не можете "внедрить" в него новый SQL-код. Что делает его более безопасным.

Хотя это только одна из причин, но, скорее всего, самая главная. И не пишите свою собственную оболочку/абстракцию, если это не для целей обучения, уже есть много хороших.

Вот хороший пост, посвященный абстракции базы данных в PHP.

person Filip Ekberg    schedule 09.02.2011

Я могу назвать как минимум две причины:

1) Рефакторинг. Технологии меняются, поэтому нужно стремиться к локализации необходимых изменений (чтобы сделать их быстро и без риска). Несколько лет назад у вас не было MySQLi или PDO. Если бы вы разработали оболочку для классического расширения MySQL, вы могли бы легко переключиться, скажем, на PDO, не меняя всех клиентов-оболочек. С другой стороны, замена сотен вызовов с mysql_connect() на mysqli_connect() звучит не так привлекательно.

2) Тестируемость. Если вы практикуете автоматизированное тестирование, добавление слоя косвенности (обертки) означает, что вы можете легко заменить его поддельным. Как следствие, вы контролируете, действительно ли запросы отправляются в базу данных или, например, регистрируются в файле. Результатом являются более быстрые и управляемые тесты.

person Flavius Stef    schedule 09.02.2011

Я не понимаю, что вы здесь спрашиваете. Но я бы предположил, что PDO — это уже то, о чем вы говорите, это "доступ к данным уровень абстракции", что означает, что вы можете использовать один и тот же код для взаимодействия с различными СУБД и легко переключаться между ними, не изменяя свой код (при условии, что вы используете SQL, совместимый с тем, между чем вы переключаетесь).

MySQLi — это расширение, используемое для прямого доступа к базам данных MySQL, а также существуют расширения для Oracle и других СУБД.

person Adam Heath    schedule 09.02.2011
comment
Спасибо за ответ, но он у меня уже есть. Взгляните выше. знак равно - person daGrevis; 10.02.2011
comment
Да, этого не было, когда я начинал! - person Adam Heath; 10.02.2011

Если вы собираетесь использовать оболочку поверх PDO, не пишите ее, уже много написано. У вас есть Doctrine, ActiveRecord, Zend_Db и, вероятно, многие другие.

person d-_-b    schedule 10.02.2011