переключиться на MySQL хорошая идея? - PullRequest
7 голосов
/ 24 марта 2010

Я рассматриваю возможность перехода на mysqli для всех моих php-проектов. То, как написан мой код (я запускаю очень простые веб-сайты и создаю свою собственную базовую среду, которую я использую для всех них), у меня не должно быть слишком много проблем с изменением функций и классов.

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

Это звучит слишком хорошо, чтобы быть правдой, поэтому я подумал, может ли кто-нибудь выделить некоторые проблемы с использованием готовых утверждений, таких как скорость и использование ресурсов.

Ответы [ 2 ]

2 голосов
/ 24 марта 2010

Подготовленные операторы настолько хороши, что как только вы к ним привыкнете, болезненно снова использовать экранирующие функции. Период.

Однако все библиотеки БД, которые я когда-либо использовал (включая oci8 и sqlsrv ...), вводят одну причуду или другую. Поэтому я в основном инкапсулирую любую библиотеку, которую я использую, с простым набором пользовательских классов, которые предоставляют функции в виде I , например:

  • Параметры на основе имени: WHERE foo = :foo
  • Параметр передается по значению в ассоциативном массиве (вместо привязки к отдельным переменным PHP): $params = array('foo' => 33)
  • Выполнение в одну строку: $res = $Db->query($sql, $params);
  • Resultsets - это объекты, которые реализуют интерфейс Iterator , поэтому я могу выполнить цикл с foreach($res as $row)

Принятие такой политики делает точный синтаксис или набор функций менее важным.

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

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

ИМХО, сам факт того, что вы спрашиваете, говорит о том, что вы должны дать mysqli шанс.

2 голосов
/ 24 марта 2010

Программирование для подготовленных операторов требует некоторого привыкания, если вы привыкли просто добавлять переменные в строки запроса. MySQL использует позиционные параметры (ваш запрос будет содержать вопросительные знаки, к которым относятся замещающие переменные). Лучше всего поместить это в существующую абстракцию базы данных. Если эта абстракция была написана правильно, вы все равно не должны вызывать mysql_fetch_array вне оболочки.

Решение этой проблемы - просто собрать все строки заранее, но, конечно, это предполагает, что вы не извлекаете 1000 строк и просто запрашиваете первую. Это изменение, которое вы должны сделать независимо от mysqli.

Наконец, некоторые операторы нелегко заменить параметрами, например, запросы с использованием синтаксиса in('x', 'y', 'z') с переменным числом аргументов. Это можно сделать, но вы, вероятно, захотите обогатить абстракцию базы данных, чтобы позволить ей создавать запросы и выполнять их.

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

Надеюсь, это поможет, Джо

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