Como analisar os resultados da linha de $ wpdb -> get_results

10

Eu tenho o seguinte:

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

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

Como obtenho as colunas denominadas 'id' e 'name' de $ row?

conservatório
fonte

Respostas:

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

Mais informações aqui

Pippin
fonte
2
Não tenho certeza se este é o caminho certo. Eu acho que se deve obter o resultado para uma variável e usar cada uma delas, para estar seguro. Por exemplo, $ results = $ wpdb-> get_results ($ sql); e use foreach ($ resultados como $ valor).
Gogol
realmente não deve importar nesse caso, pois retorna array, objeto ou nulo, não deve haver risco de obter um recurso "hostil ao loop". Dito isto, você pode querer percorrer novamente eles para outra coisa e, se assim for, definitivamente armazená-lo. não consulte duas vezes
Garet Claborn
2

Experimente sempre o Codex do WordPress: http://codex.wordpress.org/Class_Reference/wpdb#SELECT_Generic_Results

Essencialmente, dada a sintaxe padrão, a variável $ row aqui é um objeto que contém seus resultados. Como alternativa, você pode especificar o TIPO de resultado (matriz numérica, matriz associativa).

Supondo apenas um resultado, $ row-> id e $ row-> name devem fornecer as informações.

Se você receber mais de um resultado, desejará fazer um loop sobre as entradas no objeto.

Se você espera apenas uma linha retornar, tente usar $ wpdb-> get_row http://codex.wordpress.org/Class_Reference/wpdb#SELECT_a_Row

Jeff Rose
fonte
2

Para usar como uma matriz associativa:

$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 obter outros formatos, basta alterar com ARRAY_Abase na documentação de$wpdb->get_results() . A resposta de Pippin é apropriada para a maioria dos objetos.

Para usar uma linha como uma matriz numerada indexada

$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 uma linha em uma matriz cujas chaves são a chave primária do seu banco de dados (geralmente uma idcoluna). Possivelmente mais eficiente que o método de matriz associativa.

$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
fonte
1

Este código funciona perfeito para mim:

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
fonte