Как получить и обработать результаты строк из $wpdb->get_results
У меня есть следующий код:
$query = 'SELECT * FROM wp_pod_tbl_add_questions WHERE id LIKE '. $id;
$row = $wpdb -> get_results($query);
Как мне получить значения столбцов 'id' и 'name' из переменной $row?

foreach( $wpdb->get_results("SELECT * FROM your_table_name WHERE id LIKE' . $id . ';") as $key => $row) {
// каждая колонка в строке будет доступна таким образом
$my_column = $row->column_name;}
Подробнее здесь

не уверен, что это правильный способ. Думаю, для безопасности лучше сохранить результат в переменную и использовать foreach для неё. Например, $results = $wpdb->get_results($sql); а затем foreach($results as $value).

в данном случае это не должно иметь значения, так как возвращается массив, объект или null, и не должно быть риска получить ресурс, не поддерживающий циклы. однако, если вам нужно будет снова перебирать результаты для чего-то другого, определённо сохраните их. не делайте повторный запрос

Использование в качестве ассоциативного массива:
$obj=[];
$rows = $wpdb->get_results( 'SELECT * FROM `tbl_name` WHERE `id` = '.$obj_id , ARRAY_A);
foreach($rows as $row){ $obj=$row; break; }
// $obj теперь содержит выбранную строку, если совпадение было найдено
Использование
$something = $obj['column_name'];
foreach($obj as $col => $val)
echo $col . ': ' . $val . PHP_EOL . '<br />';
Для получения других форматов просто измените ARRAY_A
согласно документации для $wpdb->get_results()
. Ответ Pippin подходит для большинства случаев использования объектов.
Использование одной строки в виде числового массива
$rows = $wpdb->get_results( 'SELECT * FROM `tbl_name` WHERE `id` = '.$obj_id , ARRAY_N);
foreach($rows as $row){ $obj=$row; break; }
//Использование
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 ];
//Использование
$something = $obj->column_name;
//Помните, что по объектам также можно выполнять перебор
foreach($obj as $col => $val)
echo $col . ': ' . $val . PHP_EOL;

Всегда обращайтесь к WordPress Codex: 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
