Санация конструкции «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
) );