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

20 июл. 2011 г., 00:42:35
Просмотры: 128K
Голосов: 15

У меня есть следующий код:

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

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

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

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

Подробнее здесь

20 июл. 2011 г. 02:20:01
Комментарии

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

Gogol Gogol
13 сент. 2013 г. 14:15:57

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

That Realtor Programmer Guy That Realtor Programmer Guy
30 окт. 2017 г. 00:18:10
0

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

$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;
31 окт. 2017 г. 01:47:50
0

Этот код отлично работает для меня:

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;}    
15 мар. 2018 г. 18:52:59
0

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

20 июл. 2011 г. 01:07:48