Atualmente eu não utilizo mais as macros sc_select e sc_lookup, pois desenvolvi uma classe que já faz isso com controles melhor e uso menos de memória.
Mas segue aqui uma dica para uso do sc_lookup, sc_select criando automaticamente variaveis com o nome da coluna da tabela e seu respectivo valor.
Infelizmente a macro sc_lookup não retorna nome das colunas, apenas os índices. Então fica a sugestão para NM para que a macro sc_set_fetchmode afete também a macro sc_lookup trazendo o nome das colunas e que a macro sc_set_fetchmode tenha uma terceira opção para trazer apenas os nomes da colunas.
Já que a macro sc_set_fetchmode não afeta a macro sc_loookup, na minha dica vamos usar a macro sc_select.
Geralmente quando usamos a macro sc_lookup ou sc_select fazemos:
sc_lookup(ds, 'select codigo, nome from tabela where id = 1');
if (!empty({ds})) {
$codigo = {ds}[0][0];
$nome = {ds}[0][1];
}
Quando nossa select retorna muitas colunas, o trabalho de criar as variáveis se torna tedioso.
Segue uma dica para criar automáticamente variáveis php com o nome das colunas do select e transforma-las em globais para poder usá-las dentro de métodos php.
/*
sc_set_fetchmode(0);
0 para índice e nome da coluna,
1 para apenas indice,
podia ter opção 3 só pelo nome da coluna.
e podia afetar sc_lookup
*/
echo '<h1>sc_','select</h1>';
sc_select(ds, 'Select * from clientes limit 1');
foreach ($ds->fields as $col => $value) {
if (is_string($col)) {
$GLOBALS[$col] = $value;//transformou em global
$var = $col;
$$var = $value;
}
}
echo '<br>$cl_codigo = ', $cl_codigo; //$cl_codigo foi criado
echo '<br>$cl_razao = ', $cl_razao; //$cl_razao foi criado
mostra('cl_codigo');
$var = 'cl_razao';
mostra($var);
/* Com sc_lookup */
unset($cl_codigo); //destruindo variaveis criadas anteriormente
unset($cl_razao);
echo '<hr><hr><h1>sc_','lookup</h1>';
$cols = ['cl_codigo', 'cl_razao', 'Apelido'];
$colunas = implode(',',$cols);
sc_lookup(ds,"Select $colunas from clientes limit 1");
if ($ds) {
foreach ($cols as $key => $col) {
$GLOBALS[$col] = $ds[0][$key];
$var = $col;
$$var = $ds[0][$key];
}
}
echo '<br>$cl_codigo = ', $cl_codigo; //$cl_codigo foi criado
echo '<br>$cl_razao = ', $cl_razao; //$cl_razao foi criado
mostra('cl_codigo');
$var = 'cl_razao';
mostra($var);
function mostra($nameCol) {
echo '<hr><br>Método mostra';
global $$nameCol; // pega a variavel criada globalmente
echo '<br>GLOBALS ->',$nameCol, ' = ',$GLOBALS[$nameCol];
echo '<br>${} ->',$nameCol, ' = ',${$nameCol};
}
Resultado:
Fica a dica para facilitar a vida do desenvolvedor e a sugestão para NM melhorar as macros sc_set_fetchmode e sc_lookup e sc_select.