Защитить запрос от 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
));