prepare() not working

时间:2013-01-24 作者:wickedbroccoli

当我这样做时:

$transients = $wpdb->get_col(
    "
    SELECT     option_name
    FROM       $wpdb->options
    WHERE      option_name
    LIKE       \'_transient_wb_tt_%\'
    "
);
它工作得很好,但当我使用这样的prepare时:

$transients = $wpdb->get_col( $wpdb->prepare(
    "
    SELECT     option_name
    FROM       %s
    WHERE      option_name
    LIKE       \'_transient_wb_tt_%\'
    ",
    $wpdb->options
) );
没用,我做错什么了?

1 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

我同意@bainternet。你不需要$wpdb->prepare. 没有任何用户提供的内容。

这个问题的答案是得到一个通配符% 通过prepare 您需要在代码中加倍。

LIKE  \'_transient_wb_tt_%%\'
如果要仔细查看生成的查询,请尝试以下操作:

var_dump($wpdb->prepare("
    SELECT     option_name
    FROM       %s
    WHERE      option_name
    LIKE       \'_transient_wb_tt_%%\'
    ",
    \'abc\')); 
die;
除不必要外,使用$wpdb->prepare 这样不行。尝试使用prepare 在tablename中进行交换将导致tablename周围带有引号。这是无效的SQL。查询应简单:

SELECT     option_name
FROM       {$wpdb->options}
WHERE      option_name
LIKE       \'_transient_wb_tt_%%\'

结束

相关推荐

如何在WHERE数组中为$wpdb->更新传递NULL

如何获取元素为NULL的行的结果?我必须更新只包含post\\u id和repeat值的行,“start”和“end”应为NULLmysql表截图:http://i.imgur.com/l27is.png$wpdb->update( $schedule_table, array( \'rpt\' => $event_tag ), array( \'post_id\' => $post_ID, \'start\' => NULL, \'end\' => NULL ), arra