Получить поля mysql динамически


я Создал команду select, на основе сведений, переданных пользователем, например,

$anoini = $_GET['anoini']; //variavel com ano escolhido pelo usuário
$anofim = 2016; //ano final é 2016

$s = 'SELECT pa_proc_id, procedimento, '; //inicio da query
while ($anoini < $anofim) { //laço para listar todos os anos
    $s = $s . 'SUM( pa_qtdapr * ( 1 - ABS( SIGN( CONVERT( SUBSTRING( pa_cmp, 1, 4 ) , signed ) - '.$anoini.' ) ) ) ) AS a'.$anoini.', '; //a cada ano, ele inclui uma linha na query
    $anoini++;
}
$s = $s . 'SUM( pa_qtdapr * ( 1 - ABS( SIGN( CONVERT( SUBSTRING( pa_cmp, 1, 4 ) , signed ) - '.$anofim.' ) ) ) ) AS a'.anofim.' '; //finaliza criando a linha com o ano atual
$s = $s . 'FROM sia WHERE pa_ufmun = "'.$ibge.'" and substring(pa_cmp,1,4) >= :anoini GROUP BY pa_proc_id'; //finaliza a query

приведенный выше код прекрасно работает и мне выдает результат с несколько полей, созданных динамически в отношении каждого года с момента, указанного пользователем в 2016 году, например, a2014, a2015, a2016

Запускаю запрос, я создаю массив:

$lista = $db->prepare($s) or trigger_error($db->error);
$lista->bindValue(":anoini",$GLOBALS['anoini']);
$lista->execute();
$GLOBALS['procedimento'] = $lista->fetchAll(PDO::FETCH_ASSOC);

Мой вопрос: как узнать, какие поля (a2014, a2015, etc) были созданы и, как давать "эхо" в них?

РЕДАКТИРОВАТЬ

я var_dump, и этот результат был ниже):

array (size=130)
  0 => 
    array (size=9)
      'pa_proc_id' => string '0101010010' (length=10)
      'procedimento' => string 'ATIVIDADE EDUCATIVA / ORIENTACAO EM GRUPO NA ATENCAO BASICA ' (length=60)
      'a2010' => string '0' (length=1)
      'a2011' => string '0' (length=1)
      'a2012' => string '0' (length=1)
      'a2013' => string '0' (length=1)
      'a2014' => string '0' (length=1)
      'a2015' => string '0' (length=1)
      'a2016' => string '67' (length=2)
  1 => 
    array (size=9)
      'pa_proc_id' => string '0101020015' (length=10)
      'procedimento' => string 'ACAO COLETIVA DE APLICACAO TOPICA DE FLUOR GEL' (length=46)
      'a2010' => string '0' (length=1)
      'a2011' => string '0' (length=1)
      'a2012' => string '0' (length=1)
      'a2013' => string '0' (length=1)
      'a2014' => string '0' (length=1)
      'a2015' => string '0' (length=1)
      'a2016' => string '23' (length=2)
  2 => 
    array (size=9)
      'pa_proc_id' => string '0101020031' (length=10)
      'procedimento' => string 'ACAO COLETIVA DE ESCOVACAO DENTAL SUPERVISIONADA' (length=48)
      'a2010' => string '0' (length=1)
      'a2011' => string '0' (length=1)
      'a2012' => string '0' (length=1)
      'a2013' => string '0' (length=1)
      'a2014' => string '0' (length=1)
      'a2015' => string '0' (length=1)
      'a2016' => string '184' (length=3)

Как перечислить имена полей, а не значения (в этом случае a2010 до a2016)?

Объятия.

Author: Italo Rodrigo, 2016-11-04

2 answers

РЕШИЛ:

Использую следующий код в цикл, чтобы знать, если существуют поля и даю эхо в них.

if (isset($linha[0]['a'.$anoini])){
    echo $linha[0]['a'.$anoini];
}

Обнять всех, кто помог

 3
Author: Italo Rodrigo, 2016-11-04 19:08:59

И Вы будете выполнять цикл, и внутри этого цикла принесет результат на "эхо".

Например:

while($rs = $lista->fetchAll(PDO::FETCH_ASSOC)){
  $var1 = $rs['campo_da_tabela'];
  ...
}
 0
Author: Tiago Pereira Cardoso, 2016-11-04 19:35:22