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

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

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

// Получим записи.
// Вернет '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 
) );

Ссылки

Источник: https://www.kobzarev.com/wordpress/sanitizing-queries-with-in-clauses-with-wpdb/

Михаил Кобзарёв

Суровый русский тимлид. Жил в Магадане, в офисе московских веб студий и в Тульской деревне. Виртуозно знает WordPress, PHP, ООП, Vue.js и вот это вот все. Делает крутые высоконагруженные сайты, поэтому уже почти захватил весь рынок WordPress разработки в России. Не дает никому делать сайты без спроса. Ведет блог о разработке, дайджест в телеграмме и в ВК. Любит сиськи, баню и радиоэлектронику. 100% патриот (но это не точно). Тролль 542 уровня. Ездит в отпуск раз в 5 лет.

Добавить комментарий

%d такие блоггеры, как: