【问题标题】:Why does $wpdb->prepare() not pass my query?为什么 $wpdb->prepare() 不通过我的查询?
【发布时间】:2013-10-22 20:13:24
【问题描述】:

希望是一个快速的 Wordpress;

我正在使用 $wpdb 类在 single.php 页面上运行 db 查询。

我的查询不断被 $wpdb->prepare 删除。看起来像这样;

$query = $wpdb->prepare("SELECT post_title, guid
         FROM $wpdb->posts
         WHERE ID IN(" . implode(', ', array_fill(0, count($selected_products),
         '%d')) . ") AND post_status = %s", $selected_products, 'publish');

对疯狂的缩进感到抱歉!

如果我在 PHPMyAdmin 中通过 SQL 运行它,它可以正常工作。有什么指点吗?

【问题讨论】:

    标签: wordpress


    【解决方案1】:

    下面查询的结果呢,我也没有看到$wpdb的初始化,你应该定义为global

    global $wpdb;
    $query = $wpdb->get_results("SELECT post_title, guid
             FROM $wpdb->posts
             WHERE ID IN(" . implode(',', array_fill(0, count($selected_products),$selected_products)) . ")
             AND post_status = 'publish' ");
    

    【讨论】:

    • 是的,我已经全球化了 $wpdb。此外,此查询不会从数据库返回结果。
    • @glitchmunki 当您在 phpmyadmin 中运行查询时,此输出会显示 exit( var_dump( $wpdb->last_query ) ); 的内容
    • 嘿 dianuj,我刚刚用上面的代码变体修复了它。我只是避免通过 sprintf 将“发布”字符串传递给查询...
    • @glitchmunki 那是 gr8 快乐的编码 :)
    • 如果我需要将一个变量传递给 $wpdb->prep 我会被搞砸的。 var_dump 返回: SELECT p.ID FROM wp_sc53fc_posts AS p WHERE p.post_date
    猜你喜欢
    • 2018-07-30
    • 2014-11-21
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    • 1970-01-01
    • 2019-12-19
    • 1970-01-01
    相关资源
    最近更新 更多