Cómo analizar resultados de fila desde $ wpdb -> get_results

10

Tengo lo siguiente:

$query = 'SELECT * FROM wp_pod_tbl_add_questions WHERE id LIKE '. $id;

                                        $row = $wpdb -> get_results($query);

¿Cómo obtengo las columnas llamadas 'id' y 'nombre' de $ row?

conservador rojo
fuente

Respuestas:

18
foreach( $wpdb->get_results("SELECT * FROM your_table_name WHERE id LIKE' . $id . ';") as $key => $row) {
// each column in your row will be accessible like this
$my_column = $row->column_name;}

Más información aquí.

Reineta
fuente
2
Sin embargo, no estoy seguro si esta es la forma correcta. Creo que uno debe obtener el resultado en una variable y usar foreach en eso, para estar seguro. Por ejemplo, $ results = $ wpdb-> get_results ($ sql); y luego use foreach ($ resultados como $ valor).
Gogol
No debería importar realmente en este caso, ya que devuelve una matriz, un objeto o un valor nulo, no debería haber ningún riesgo de obtener un recurso "hostil al bucle". Dicho esto, es posible que desee volver a recorrerlos para otra cosa, y si es así, definitivamente almacénelos. no
preguntes
2

Pruebe siempre el Codex de WordPress: http://codex.wordpress.org/Class_Reference/wpdb#SELECT_Generic_Results

Básicamente, dada la sintaxis predeterminada, la variable $ row aquí es un objeto que contiene sus resultados. Alternativamente, puede especificar el TIPO de resultado (matriz numérica, matriz asociativa).

Suponiendo solo un resultado, $ row-> id y $ row-> name deberían proporcionarle la información.

Si obtiene más de un resultado, desearía recorrer las entradas del objeto.

Si espera solo una fila hacia atrás, intente usar $ wpdb-> get_row http://codex.wordpress.org/Class_Reference/wpdb#SELECT_a_Row

Jeff Rose
fuente
2

Para usar como una matriz asociativa:

$obj=[];
$rows =  $wpdb->get_results( 'SELECT * FROM `tbl_name` WHERE `id` = '.$obj_id , ARRAY_A);
foreach($rows as $row){  $obj=$row; break; }

// $obj is now the selected row if a match was found

Uso

$something = $obj['column_name'];
foreach($obj as $col => $val)
    echo $col . ': ' . $val . PHP_EOL . '<br />';

Para obtener otros formatos, simplemente cambie ARRAY_Asegún la documentación de$wpdb->get_results() . La respuesta de Pippin es apropiada para la mayoría del uso de objetos.

Para usar una fila como una matriz indexada numéricamente

$rows =  $wpdb->get_results( 'SELECT * FROM `tbl_name` WHERE `id` = '.$obj_id , ARRAY_N);
foreach($rows as $row){  $obj=$row; break; }

//Usage
foreach($obj as $col_value) echo $col_value . ' ';

Para usar una fila en una matriz cuyas claves son la clave principal de su base de datos (a menudo una idcolumna). Posiblemente más eficiente que el método de matriz asociativa.

$rows =  $wpdb->get_results( 'SELECT * FROM `tbl_name` WHERE `id` = '.$obj_id ,  OBJECT_K);
$obj = $rows[ $obj_id ];

//Usage

$something = $obj->column_name;

//Remember you can loop over objects too
foreach($obj as $col => $val)
    echo $col . ': ' . $val . PHP_EOL;
Garet Claborn
fuente
1

Este código funciona perfecto para mí:

global $wpdb;
$table_name = "my_table_name";
$myrows = $wpdb->get_results( "SELECT `id`, `name` FROM ".$table_name);
    foreach ($myrows as $details) {
      echo $details->id;
      echo $details->name;}    
Jismon Thomas
fuente