Как разобрать результаты строки из $ wpdb -> get_results

11

У меня есть следующее:

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

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

Как мне получить столбцы с именами 'id' и 'name' из $ row?

redconservatory
источник

Ответы:

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

Больше информации здесь

пепин
источник
2
не уверен, что это правильный путь. Я думаю, что нужно получить результат для переменной и использовать foreach, чтобы быть в безопасности. Например, $ results = $ wpdb-> get_results ($ sql); и затем используйте foreach ($ results как $ value).
Гоголь
в этом случае не должно иметь большого значения, так как он возвращает массив, объект или ноль, не должно быть никакого риска получить ресурс «недружественного цикла». при этом вы, возможно, захотите просмотреть их снова для чего-то другого, и, если это так, определенно сохраните их не
спрашивайте
2

Всегда пробуйте кодекс WordPress: http://codex.wordpress.org/Class_Reference/wpdb#SELECT_Generic_Results

По сути, учитывая синтаксис по умолчанию, переменная $ row здесь является объектом, содержащим ваши результаты. Вы можете поочередно указать ТИП результата (числовой массив, ассоциативный массив).

Если предположить только один результат, то $ row-> id и $ row-> name должны дать вам информацию.

Если вы получите более одного результата, вы захотите перебрать записи в объекте.

Если вы ожидаете только одну строку назад, попробуйте использовать $ wpdb-> get_row http://codex.wordpress.org/Class_Reference/wpdb#SELECT_a_Row

Джефф Роуз
источник
2

Для использования в качестве ассоциативного массива:

$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

Применение

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

Чтобы получить другие форматы, просто измените ARRAY_Aна основе документации для$wpdb->get_results() . Ответ Пиппина подходит для большинства объектов.

Чтобы использовать одну строку в качестве числового индекса

$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 . ' ';

Использовать одну строку в массиве, ключи которого являются первичным ключом вашей базы данных (часто это idстолбец). Возможно, более эффективный, чем метод ассоциативного массива.

$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;
Гарет Клаборн
источник
1

Этот код идеально подходит для меня:

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;}    
Джисмон Томас
источник