在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
有关初始查询的工作原理但是第二个查询的错误,即使数据库连接正常并且位于对象内部,也会产生错误吗?
答案 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语句。