2013-04-08 137 views
1

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

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

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

从文档:

The function returns an integer corresponding to the number of rows affected/selected. If there is a MySQL error, the function will return FALSE.

here

$wpdb->query()方法不返回的结果,则返回实现的行数。例如,如果您想要使用$wpdb->get_results()的结果,但可能其中一种方法更符合您的需求。

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

看看here$wpdb参考那里每个方法都很好地解释。

祝你好运!

+0

感谢Philipp的回复。我会再读一遍,看看会发生什么。 – JPDP 2013-04-10 03:49:13

0

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

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