wpdb :: prepare foi chamado incorretamente

2

Eu tenho este código para remover postagens órfãs depois de excluir o tipo de postagem personalizado.

Funciona, mas esse 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á jogando esse erro:

  

Aviso do PHP: wpdb :: prepare foi chamado incorretamente . O argumento de consulta de wpdb :: prepare () deve ter um marcador de posição.

Então, depois de ler a explicação em make.wordpress.org por Andrew Nacin, eu (meio) reúno isso ... bem ... eu estou perdendo o segundo argumento.

Então, depois de ler esta postagem da pilha , estou pensando se preciso mesmo da função prepare() . Existem alguma variável com valores desconhecidos? Eu não estou claro sobre isso.

... o que estou perdendo?

UPDATE: Este código também funciona, mas sem o prepare () eu me pergunto se é 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, informe.

    
por sleeper 16.06.2014 / 06:07

1 resposta

7

É sempre aconselhável usar $wpdb->prepare quando você está recebendo informações do usuário. Isso ajudará na proteção de consultas contra injeção de SQL. Para mais detalhes, consulte o Codex

Quando você usa $wpdb->prepare , deve passar as variáveis para a consulta. No seu caso, você pode pular usando $wpdb->prepare enquanto estiver usando um valor codificado. Mas se você tem o mesmo valor em termos de uma variável, você precisa modificá-lo como abaixo

$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
     )
);
    
por Chittaranjan 16.06.2014 / 08:59