web-dev-qa-db-fra.com

wpdb :: prepare n'a pas été appelé correctement

J'ai ce code pour supprimer les publications orphelines après la suppression du type de publication personnalisée.

Cela fonctionne, mais ce code ...

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'"
  )
);

... lance cette erreur:

Avis de PHP: wpdb :: prepare a été appelé incorrectement . L'argument de requête de wpdb :: prepare () doit avoir un espace réservé.

Donc, après avoir lu l'explication sur make.wordpress.org d'Andrew Nacin, j'ai (en quelque sorte) rassemblé cela ... eh bien ... le deuxième argument me manque.

Puis, après avoir lu cet article de pile , je me demande même si j’ai même besoin de la fonction prepare(). Existe-t-il des variables contenant des valeurs inconnues? Je ne suis pas clair à ce sujet.

...Qu'est-ce que je rate?

UPDATE: Ce code fonctionne aussi, mais sans le prepare (), je me demande si c'est sûr.

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'"
);

S'il vous plaît donnez votre avis.

3
sleeper

Il est toujours conseillé d'utiliser $wpdb->prepare lorsque vous prenez des entrées de l'utilisateur. Cela aidera à protéger les requêtes contre l'injection SQL. Pour plus de détails, consultez le Codex

Lorsque vous utilisez $wpdb->prepare, vous devez transmettre les variables à la requête. Dans votre cas, vous pouvez ignorer l'utilisation de $wpdb->prepare car vous utilisez une valeur codée en dur. Mais si vous avez la même valeur en termes de variable, vous devez la modifier comme suit.

$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
     )
);
7
Chittaranjan