WordPress – get_results() – ¿Cómo saber si falló o está vacío?

3 minutos de lectura

Yo uso la función de WordPress $wpdb->get_results()

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

Dice:

“Si no se encuentran filas coincidentes, o si hay un error en la base de datos, el valor de retorno será una matriz vacía”.

Entonces, ¿cómo puedo saber si la consulta falló O si está vacía?

avatar de usuario
sagar devkota

Usar

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

}

Pero si quieres saber si la consulta falló

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

  • Luego obtengo el último error, no si la última consulta tiene un error o no. El último error podría haber sido hace 10 consultas.

    – Jens Tornell

    26 de marzo de 2015 a las 11:40

Un poco tarde para la fiesta aquí, pero estoy buscando lo mismo. He tenido una navegación a través de la wp-db.php código en la versión 4.4.2.

En la línea 1422, dentro del método flush() hay un poco de código que restablece el last_error propiedad:

$this->last_error="";

Este flush() se llama al método en el query() método en la línea 1693:

$this->flush();

los get_results() llamadas a métodos query() en la línea 2322:

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

Con esto podemos estar bastante seguros de que más o menos cada vez get_results() (O get_row() también para el caso) se llama, query() y flush() ambos son llamados, lo que asegura que last_error se establece en la cadena vacía antes de que se ejecute la consulta.

Suponiendo que se ejecuta la consulta (si no es así, null se devuelve – si la consulta está vacía, por ejemplo), last_error debería contener un mensaje de error si la consulta fallara por algún motivo.

Ya que last_error es flush()ed/reset cada vez, solo debe contener un error para la última consulta que se ejecutó, en lugar del último error para cualquier consulta que se haya ejecutado anteriormente. Con esto en mente, debería ser seguro confiar en last_error para determinar si algo salió mal con la consulta.

$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
}

No es el más intuitivo en mi opinión, pero parece ser suficiente.

Personalmente, he escrito mi propia clase alrededor wpdb para mi propio beneficio. Este es mi getResults() método.

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;
}

Espero que esto ayude.

La función Wpdb->get_results de wordpress devuelve el resultado si tiene éxito; de lo contrario, devolverá un valor nulo. Puede haber muchas razones si una consulta falla. Consulte el artículo detallado sobre la depuración de get_results () que regresa resultados vacíos aquí

Aunque puedes usar funciones como wpdb->show_error() para verificar cuál fue el último error después de ejecutar la consulta sql. a veces este error regresa vacío, entonces intente usar wpdb->last_query para verificar la consulta final que se forma.

¿Ha sido útil esta solución?