Верх страницы
Обложка к записи Санация конструкции «IN» в $wpdb
Время для прочтения: 0 мин. 22 сек.

Санация конструкции «IN» в $wpdb

Класс $wpdb включает в себя метод $wpdb->prepare(), который очищает и делает безопасным сам запрос, основываясь на типах данных (строка, число, число с плавающей точкой).

Но в нем нет простого способа для санирования внутри структуры IN. Попробуем это исправить.

<?php
// Получим записи.
// Вернет 'array(1, 3, 5, 8, 13, [...])'
$special_entries = get_option( 'entries' );
 
// Посчитаем количество записей
$how_many = count( $special_entries );
 
// Подготовим нужное количество плейсхолдеров.
// Если нужны строки, а не числа - используйте '%s'
$placeholders = array_fill( 0, $how_many, '%d' );
 
// Склеим плейсхолдеры в строку.
// Вернёт '%d, %d, %d, %d, %d, [...]'
$format = implode( ', ', $placeholders );
 
// Вставим плейсхолдеры в запрос
$query = "
  SELECT ID, post_title, post_name, post_parent 
  FROM $wpdb->posts 
  WHERE post_parent IN( $format )";
 
// Выполним безопасно запрос и получим данные
$results = $wpdb->get_results( $wpdb->prepare( 
  $query, $special_entries
) );

Ссылки

ВКонтакте
Одноклассники
Telegram

Комментарии
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии