2

在 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

关于为什么初始查询有效但第二个查询导致错误的任何见解,即使数据库连接有效并且位于对象内部?

4

2 回答 2

3

从文档:

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

这里

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

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

看看这里$wpdb参考资料,每种方法都解释得很好。

祝你好运!

于 2013-04-08T07:03:58.393 回答
0

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

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

于 2013-04-08T07:45:02.240 回答