在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->query而不是$wpdb->get_results。
示例(同样,仅限相关人员):
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即使数据库连接工作并且位于对象内部,您是否了解为什么第一个查询可以工作,但是第二个查询会导致错误?
发布于 2013-04-08 15:03:58
从文档中:
此函数返回与受影响/选定的行数相对应的整数。如果出现MySQL错误,函数将返回FALSE。
来自here
$wpdb->query()方法不返回结果,它返回受影响的行数。例如,如果您希望结果使用$wpdb->get_results(),但可能其他方法之一更适合您的需求。
这就是获取FatalError的原因,因为Integer不是一个对象。
看一看$wpdb参考中的here,每种方法都有很好的解释。
祝好运!
发布于 2013-04-08 15:45:02
在您的示例中,您尝试对stdClass array()或结果运行$wpdb->query,而不是针对SQL查询。
$wpdb->get_results将返回一个对象/行数组,而不是您希望的另一个可查询的SQL语句。最终,您可以编写一个控制循环来生成新的SQL语句。
https://stackoverflow.com/questions/15869513
复制相似问题