prepare () não está funcionando

4

Quando faço isso:

$transients = $wpdb->get_col(
    "
    SELECT     option_name
    FROM       $wpdb->options
    WHERE      option_name
    LIKE       '_transient_wb_tt_%'
    "
);

Funciona bem, mas quando eu uso prepare assim:

$transients = $wpdb->get_col( $wpdb->prepare(
    "
    SELECT     option_name
    FROM       %s
    WHERE      option_name
    LIKE       '_transient_wb_tt_%'
    ",
    $wpdb->options
) );

Não funciona, o que estou fazendo errado aqui?

    
por wickedbroccoli 24.01.2013 / 20:30

1 resposta

1

Concordo com o @bainternet. Você não precisa de $wpdb->prepare . Não há conteúdo fornecido pelo usuário.

A resposta para a pergunta é que, para obter um curinga % para passar por prepare , você precisará duplicá-lo em seu código.

LIKE  '_transient_wb_tt_%%'

Tente isso ou aquilo se quiser uma boa olhada na consulta gerada:

var_dump($wpdb->prepare("
    SELECT     option_name
    FROM       %s
    WHERE      option_name
    LIKE       '_transient_wb_tt_%%'
    ",
    'abc')); 
die;

Além de ser desnecessário, usar $wpdb->prepare desse jeito não funcionará. A tentativa de usar prepare para trocar no nome da tabela resultará em um nome de tabela com aspas em torno dele. Isso é inválido SQL. A consulta deve ser simples:

SELECT     option_name
FROM       {$wpdb->options}
WHERE      option_name
LIKE       '_transient_wb_tt_%%'
    
por s_ha_dum 24.01.2013 / 20:54