Uno de los métodos que incluye la clase wpdb
es prepare
, que permite preparar una consulta a la base de datos para asegurarnos que se ejecute de forma segura.
Su utilización es bastante sencilla — y si hasta ahora no la estás utilizando deberías leer inmediatamente la sección sobre cómo proteger tus consultas ante ataques de inyección SQL — pero hasta hace poco no había ideado una forma sencilla de preparar consultas con cláusulas IN
.
Una solución bastante sencilla que podemos aplicar es la siguiente:
// obtener un listado de IDs de entradas "especiales" // $special_entries = array(1, 3, 5, 8, 13, [...]); $special_entries = get_option('my_special_entries'); // ¿cuántas condiciones se van a seleccionar? $how_many = count($special_entries); // prepara la cantidad adecuada de reemplazos // si se buscarán strings, el último parámetro sería '%s' $placeholders = array_fill(0, $how_many, '%d'); // unir los reemplazos con comas // $format = '%d, %d, %d, %d, %d, [...]' $format = implode(', ', $placeholders); // la consulta $query = "SELECT ID, post_title, post_name, post_parent FROM $wpdb->posts WHERE post_parent IN($format)"; // obtener los resultados de forma segura $results = $wpdb->get_results( $wpdb->prepare($query, $special_entries) );