Wordpress - get_results() - 如何知道失败还是空?

时间:2015-03-26 08:50:38

标签: database wordpress select wpdb

我使用Wordpress函数$ wpdb-> get_results()

https://codex.wordpress.org/Class_Reference/wpdb#SELECT_Generic_Results

它说:

“如果找不到匹配的行,或者存在数据库错误,则返回值将为空数组。”

然后我怎么知道查询是否失败或者它是否为空?

3 个答案:

答案 0 :(得分:9)

使用

$results=$wpdb->get_results($yoursql);
if (count($results)> 0){
    //do here

}

但是如果你想知道查询是否失败

$wpdb -> show_errors ();
$wpdb -> get_results ($wpdb -> prepare($sql));
$wpdb -> print_error ();

答案 1 :(得分:3)

这里的派对迟到了,但我只是在找同样的事情。我已经浏览了版本4.4.2的wp-db.php代码。

在第1422行,方法flush()内部有一些代码可以重置last_error属性:

$this->last_error  = '';

在第1693行的flush()方法中调用此query()方法:

$this->flush();

第{23}行get_results()方法调用query()

if ( $query ) {
    $this->query( $query );
} else {
    return null;
}

有了这个,我们可以非常肯定,每次调用get_results()(或者get_row())或多或少都会被调用,query()flush()都会被调用,确保在执行查询之前将last_error设置为空字符串。

假设查询运行(如果没有,则返回null - 如果查询为空),last_error如果查询失败则应包含错误消息原因。

由于last_error每次都被flush()编辑/重置,因此它应该只包含上次运行的查询的错误,而不是之前运行的任何查询的最后一个错误。考虑到这一点,依靠last_error来确定查询是否出错是应该是安全的。

$results = $wpdb->get_results($sql);
if (is_null($results) || !empty($wpdb->last_error)) {
    // Query was empty or a database error occurred
} else {
    // Query succeeded. $results could be an empty array here
}

在我看来,这不是最直观的,但似乎已经足够了。

就个人而言,为了自己的利益,我在wpdb附近编写了自己的课程。这是我的getResults()方法。

public function getResults($query, $bindings = [])
{
    // Prepare the statement (My prepare method inspects $query and just returns it if there's no bindings, otherwise it uses $wpdb->prepare()        
    $prepared = $this->prepare($query, $bindings);

    // Execute the statement
    $rows = $this->db->get_results($prepared, ARRAY_A);

    // If an array was returned and no errors occurred, return the result set
    if (is_array($rows) && empty($this->db->last_error)) {
        return $rows;
    }

    // On failure, return false
    return false;
}

希望这有帮助。

答案 2 :(得分:0)

Wpdb->get_results 函数从 wordpress 返回结果,如果成功,否则返回 null。如果查询失败,可能有很多原因。请参阅有关调试 get_results() 返回 empty results here

的深入文章

虽然你可以使用 wpdb->show_error() 之类的函数来检查执行 sql 查询后的最后一个错误是什么。有时此错误返回空 然后尝试使用 wpdb->last_query 检查形成的最终查询。