DICA:: sc_lookup, sc_select Criar variavel com nome da coluna da tabela

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.

2 Curtidas