Защитить запрос от sql-инъекции при работе с prepare объекта wpdb при запросе по массиву ids

Работая с объектом wpdb, при использовании get_results нужно защищать запрос от SQL-инъекций. Один из способов (точно не знаю, но вроде предпочтительный способ) использовать prepare

В своем запросе я получаю записи на основе массива $entries_ids:

$entries_ids = [1, 2, 3]; //для примера

//пробовал по-разному вставлять через %s, получилось только без %s:
$entries = $wpdb->get_results( $wpdb->prepare(
  "SELECT ai.id, ai.entry_id, ai.price
  FROM {$wpdb->base_prefix}ajax_wpform_entries_add_info ai 
  WHERE ai.entry_id IN (". implode( ',', $entries_ids ) .")"
) ); //так работает, но ведь это незащищенный запрос от sql-инъекции, т.к. данные вставляются напрямую а не через %s, %d, %f?

Защищенный ли это запрос от sql-инъекции и если нет, то как его правильно сделать защищенным? Спасибо.


Ответы (1 шт):

Автор решения: Roman-Stop RU aggression in UA

Как-то так:

$id_placeholders = implode(', ', array_fill(0, count($entries_ids), '%d'));
 
$entries = $wpdb->get_results($wpdb->prepare(
    "SELECT ai.id, ai.entry_id, ai.price
    FROM {$wpdb->base_prefix}ajax_wpform_entries_add_info ai 
    WHERE ai.entry_id IN ( $id_placeholders )",
    $entries_ids
));
→ Ссылка