Переход к использованию подготовленных инструкций для запросов в Joomla 4

Старт! Честный VDS/VPS, на котором «Лунная База» живет уже 20+ лет

Задумываетесь о том, чтобы поднять свой pet-проект, сайт клиента или настроить окружение для разработки? Уже пора подумать, где арендовать железо.

Лунная База хостится на FirstVDS более 20 лет. Мыслей о том, чтобы перебраться на другой хостинг, не было ни разу (хотя опыт работы с другими вариантами, конечно, есть).

Бывали разные ситуации, но они бывают на любом железе. Главное, что нужно понять: здесь нет маркетинговой шелухи и сказок про «мы всё сделаем за вас». Если вы берете VDS — вам дают полный root, возможность накатить любую ОС и не лезут в ваши конфиги.

Если в саппорт написать с вопросом по вашему коду и получить ответ: «Читайте документацию и разбирайтесь сами» или «Обратитесь к профильному специалисту» — это не повод обижаться. Это повод углубить свои знания в DevOps и сайтостроении! Бегите от тех, кто пообещает: «Мы всё чиним и настраиваем абсолютно бесплатно!». Никто никогда не работает «по доброте душевной» в ущерб себе, а бесплатный сыр в администрировании обычно заканчивается сломанной базой данных.

Что по факту: Гибкое масштабирование ядер и RAM, экономия по сравнению с физическими серверами и адекватная панель ispmanager, если она вам нужна.



Введение в реализацию подготовленных отчетов Joomla 4

В Joomla 4 вы увидите, как Joomla постепенно переходит к использованию подготовленных инструкций для всех наших запросов. Цель этой статьи — объяснить, почему и как мы это делаем.

Причина реализации подготовленных отчетов в Joomla 4

В PHP 5.3 введена концепция подготовленных операторов. В Joomla 4 мы собираемся начать использовать их в своих интересах. Основное преимущество подготовленных операторов состоит в том, чтобы уменьшить подверженность базы кода атакам SQL-инъекций, отправляя запрос и данные отдельно. Вы можете представить, как PHP отправляет запрос следующим образом:

Prepared Statements
Query: SELECT foobar FROM bar WHERE foo = ?
Data:  [? = 'bar']

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

Реализация подготовленных отчетов через JDatabaseDriver

Реализация подготовленных заявлений в Joomla очень проста и является кроссплатформенной. Например, вот простой запрос Joomla 3.x из плагина аутентификации Joomla.

$query = $this->db->getQuery(true)
	->select($this->db->quoteName(array('id', 'password')))
	->from($this->db->quoteName('#__users'))
	->where($this->db->quoteName('username') . '=' . $this->db->quote($credentials['username']));

Чтобы преобразовать его в подготовленный оператор, мы вместо имени пользователя заменим именованное значение, а затем свяжем наши реальные данные с запросом.

$query = $this->db->getQuery(true)
	->select($this->db->quoteName(array('id', 'password')))
	->from($this->db->quoteName('#__users'))
	->where($this->db->quoteName('username') . ' = :username')
	->bind(':username', $credentials['username']);

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

Некоторые функции в JDatabaseDriver будут автоматически использовать подготовленные инструкции. Например, whereIn() и whereNotIn() автоматически будут использовать значения и добавлять подготовленные операторы в запрос.

$query = $this->db->getQuery(true)
	->select($this->db->quoteName(array('id, password')))
	->from($this->db->quoteName('#__users'))
	->whereIn($this->db->quoteName('id'), [ 1, 2, 3 ]);

Этот запрос будет преобразован в подготовленную инструкцию sql.

SELECT 
  `id`, `password`
FROM
  `#__users`
WHERE
  `id` IN (
    :preparedArray1,
    :preparedArray2,
    :preparedArray3
  );

Заполнители :preparedArray1-3 будут заполнены 1,2,3 при выполнении.

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

  • bind()
  • bindArray()
  • whereIn()
  • whereNotIn()

Везде, где возможно, вам следует использовать подготовленные инструкции.

Перевод с английского официальной документации Joomla 4:
https://docs.joomla.org/J4.x:Moving_Joomla_To_Prepared_Statements

Самый честный хостинг за 20+ лет существования Лунной Базы

Задумываешься о том, чтобы поднять свой сайт в Интернете? Уже пора подумать о том, какой хостинг выбрать?

Лунная База хостится 20+ лет на firstDVS. При этом, мыслей о том, чтобы перебраться на другой хостинг не было. (Но, при этом есть опыт работы с другими вариантами.)

Бывали с firstDVS разные ситуации, но, они бывают на всех хостингах. Единственное, что тут важно понять, - это то, что никто ничего тебе не будет впаривать... Но, и работать за тебя тоже никто не станет. Если в саппорт ответили: «Читайте по ссылке и разбирайтесь сами...» или вообще «Обратитесь за помощью к специалисту», - это повод углубить свои знания в области сайтостроения, а не бежать к тем, что пообещают: «Мы всё чиним и всё делаем за своих клиентов абсолютно бесплатно!» Никто никогда ничего ни за кого "по доброте душевной" не делал, не делает и не будет делать!

Старт! Горячий старт на просторы интернета
Старт! Горячий старт на просторы интернета
Старт! Меню