Wordpress - WPDB查询

时间:2013-04-08 00:28:16

标签: php wordpress pdo

在wordpress中,我正在查询我手动添加的自定义行和列的默认表。我正在全球化$wpdb(Wordpress数据库函数),它适用于一半的代码。

例如,脚本的第一部分就是这样(只显示代码的相关部分):

    class Test {

    public function getP($param){

    global $wpdb;
    $q = $wpdb->get_results("SELECT * FROM tbl WHERE " . $param['1']." = '" . $param['2'] . "'");
    }
    }

这样查询在$wpdb运行时就可以运行了,我可以打印返回的结果。

但是,我需要根据结果运行另一个查询,因此我需要使用$wpdb->get_results而不是$wpdb->query

示例(同样,只有相关者):

    global $wpdb;

    $stmt = $this->wpdb->query($q);

    if($param['type'] == 'x'){

    $data = $stmt->fetchAll();

    }else{

$data = $stmt->fetch();

    }

return $data;

这不起作用,因为它似乎落在对象之外并提供以下错误:

    Fatal error: Call to a member function query() on a non-object

有关初始查询的工作原理但是第二个查询的错误,即使数据库连接正常并且位于对象内部,也会产生错误吗?

2 个答案:

答案 0 :(得分:2)

来自文档:

  

该函数返回与受影响/选择的行数对应的整数。如果存在MySQL错误,则该函数将返回FALSE。

来自here

$wpdb->query()方法不返回结果,它返回受影响的行数。例如,如果您希望结果使用$wpdb->get_results(),但其他一种方法可能更适合您的需求。

这就是你得到FatalError的原因,因为整数不是一个对象。

$wpdb引用处查看here,可以很好地解释每种方法。

祝你好运!

答案 1 :(得分:0)

在您的示例中,您尝试针对$wpdb->query或结果运行stdClass array(),而不是SQL查询。

$wpdb->get_results将返回一个对象/行数组,而不是像您希望的那样返回另一个可查询的SQL语句。您最终可以编写一个控件循环来生成新的SQL语句。