wpdb :: prepare fue llamado incorrectamente

2

Tengo este código para eliminar publicaciones huérfanas después de eliminar el tipo de publicación personalizada.

Funciona, pero este código ...

global $wpdb;
$wpdb->query( 
    $wpdb->prepare( 
    "DELETE a,b,c FROM wp_posts a
    LEFT JOIN wp_term_relationships b ON (a.ID=b.object_id)
    LEFT JOIN wp_postmeta c ON (a.ID=c.post_id)
    WHERE a.post_type='attorneys'"
  )
);

... está lanzando este error:

  

Aviso de PHP: wpdb :: prepare se llamó incorrectamente . El argumento de consulta de wpdb :: prepare () debe tener un marcador de posición.

Entonces, después de leer la explicación en make.wordpress.org por Andrew Nacin, (sorta) reconozco que ... bueno ... me estoy perdiendo el segundo argumento.

Luego de leer esta publicación de pila , me pregunto si incluso necesito la función prepare() . ¿Existen variables con valores desconocidos? No tengo claro esto.

... ¿Qué me estoy perdiendo?

ACTUALIZACIÓN: este código también funciona, pero sin la preparación () me pregunto si es seguro.

global $wpdb;
$wpdb->query( 
  "DELETE a,b,c FROM wp_posts a
  LEFT JOIN wp_term_relationships b ON (a.ID=b.object_id)
  LEFT JOIN wp_postmeta c ON (a.ID=c.post_id)
  WHERE a.post_type='attorneys'"
);

Por favor avise.

    
pregunta sleeper 16.06.2014 - 06:07

1 respuesta

7

Siempre se recomienda utilizar $wpdb->prepare cuando está tomando información del usuario. Esto ayudará a proteger las consultas contra la inyección SQL. Para obtener más detalles, consulte Codex

Cuando usa $wpdb->prepare , debe pasar las variables a la consulta. En su caso, puede omitir el uso de $wpdb->prepare ya que está usando un valor codificado. Pero si tiene el mismo valor en términos de una variable, necesita modificarlo de la siguiente manera

$post_type = 'attorneys';

$wpdb->query( 
     $wpdb->prepare(
          "DELETE a,b,c FROM wp_posts a
          LEFT JOIN wp_term_relationships b ON (a.ID=b.object_id)
          LEFT JOIN wp_postmeta c ON (a.ID=c.post_id)
          WHERE a.post_type=%s",
          $post_type
     )
);
    
respondido por el Chittaranjan 16.06.2014 - 08:59

Lea otras preguntas en las etiquetas