Время для прочтения: 1 мин. 6 сек.

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

Ссылки

Поделиться
Плюсануть
Телеграмнуть

Для вставки кода используйте HTML-теги
<pre><code class="php">ваш код</code></pre>

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

Такой e-mail уже зарегистрирован. Воспользуйтесь формой входа или введите другой.

Вы ввели некорректные логин или пароль

Извините, для комментирования необходимо войти.

Нажимая на кнопку "Отправить", я даю согласие на обработку персональных данных.