¿$wpdb->get_row() solo devuelve una única fila?

8 abr 2011, 06:42:01
Vistas: 196K
Votos: 39

¿Por qué sucede esto? Probé la misma consulta en la consola y devolvió múltiples filas. Aquí está la consulta:

$this->wpdb->get_row("SELECT * FROM ".$this->wpdb->users." WHERE status = 'active'", ARRAY_A);

Sigue devolviendo la misma fila única cuando hay varios usuarios activos. ¿Me estoy perdiendo algo?

1
Comentarios

Se llama get_row() por una razón...

Ciprian Ciprian
17 ago 2021 12:53:06
Todas las respuestas a la pregunta 4
1
66

De hecho, usa get_row() solo cuando esperas obtener un resultado, de lo contrario puedes usar get_results()

8 abr 2011 06:52:38
3
58

Existen tres formas de obtener datos de la base de datos.

1. $wpdb->get_var: Úsalo para obtener un único valor de la tabla de la base de datos. Por ejemplo, si quieres contar el número total de comentarios. Puedes hacerlo de la siguiente manera:

<?php 
$comment_count = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM $wpdb->comments;")); 
echo '<p>Comentarios totales: ' . $comment_count . '</p>';
?>

2. $wpdb->get_row: Para recuperar una fila completa de la tabla puedes usar esto.

Ejemplo:

<?php 
$thepost = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE ID = 1" ) );
echo $thepost->post_title; 
?>

O

<?php 
$thepost = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE ID = 1" ), ARRAY_A );
print_r ($thepost); 
?>

Al usar el parámetro ARRAY_A en get_row, los datos del post se devuelven como un array asociativo. Alternativamente, puedes usar el parámetro ARRAY_N para devolver los datos del post en un array indexado numéricamente.

3. $wpdb->get_results: Las consultas SELECT estándar deben usar la función get_results para recuperar múltiples filas de datos de la base de datos.

<?php 
global $wpdb;
$allposts = $wpdb->get_results( $wpdb->prepare("SELECT ID, post_title FROM $wpdb->posts WHERE post_status = 'publish'") );
foreach ($allposts as $singlepost) { 
         echo '<p>' .$singlepost->post_title. '</p>';
}
?>

Y necesitarás el último método, como puedes suponer.

8 abr 2011 10:00:57
Comentarios

Ejemplos maravillosos con gran detalle..

pixelngrain pixelngrain
27 ene 2013 19:31:10

¡Claro! por qué no..

pixelngrain pixelngrain
28 ene 2013 18:45:23

Ejemplos realmente geniales. Para la optimización de velocidad en el último ejemplo, recomendaría cambiar esto: ($allposts as $singlepost) por: ($allposts as $k => $singlepost)

Cyborg Cyborg
30 dic 2020 04:39:40
0
$wpdb->get_row('query', output_type, row_offset);

row_offset (entero) La fila deseada (0 siendo la primera). Por defecto es 0.

ver http://codex.wordpress.org/Class_Reference/wpdb

1 sept 2011 18:57:24
2

mi solución es simple..

<?php
function count_results() {
    # usa la base de datos
    global $wpdb;

    # Consulta para contar todos los resultados de una tabla
    $sql_count_results = '
        SELECT count(*) as count
        FROM `YOUR_TABLE`;';

    # Ejecutar función
    $results = $wpdb->get_row( $sql_count_results , OBJECT );

    # Retornar resultados
    return $results->count;
}

Uso:

<?php
echo count_results();
16 nov 2016 11:05:10
Comentarios

Sería genial si también pudieras explicar qué hace este código además de publicarlo.

bravokeyl bravokeyl
16 nov 2016 11:21:11

Esto cuenta las filas en una tabla, no es una respuesta a la pregunta del OP.

alexg alexg
16 ene 2019 00:02:34