Sobre sc_select_where(add)

Pessoal,
Criei um banco de dados contendo os where para uma consulta, para que possa cadastrar filtros a partir da configuração desse banco.
Na consulta utilizo o sc_select_where(add) que recebe a string desse banco de dados. Acontece que quando tem uma variavel [variavel] ele não consegue visualizá-la.
Assim eu faço:
sc_lookup(ds, “select bco_id,bco_descr,bco_sql from bco_consiste where bco_id=’[ptipo]’ order by bco_id asc”);
if ({ds} === false)
{
echo "Erro de acesso! “;
}
elseif (empty({ds}))
{
sc_select_where(add) =” WHERE l_ul=‘1’ ";
}
else
{
[pnome_consiste] = {ds[0][1]};
sc_select_where(add) = {ds[0][2]};
}

E assim é exibido:

(pdo-mysql): select count(*) from leitura INNER JOIN dados ON leitura.l_instalacao = dados.dados_instalacao AND leitura.l_reg = dados.dados_reg WHERE ( l_adm=’[padm]’ and l_razao=’[prazao]’ and leit_A02=‘A02’ )

Alguém pode me ajudar?

Obrigado.

Olá,

Faça assim:

$cSql = “select bco_id,bco_descr,bco_sql from bco_consiste where bco_id=’”.[ptipo]."’ order by bco_id asc";

sc_lookup(ds, $cSql);
if ({ds} === false)
{
echo "Erro de acesso! “;
}
elseif (empty({ds}))
{
sc_select_where(add) =” WHERE l_ul=‘1’ ";
}
else
{
[pnome_consiste] = {ds[0][1]};
sc_select_where(add) = {ds[0][2]};
}

Creio que não vá dar certo gravar as variáveis {} ou [] na base, porque quando você coloca elas no seus códigos diretamente durante a geração do código,
o SC troca elas por $this-> e variáveis de sessão fixa que fazem parte do próprio código gerado, como no banco de dados ‘ele não tem esse’ acesso a
essas variáveis para fazer isso, por isso que ele traz elas como se fossem strings comuns ‘[padm’], etc.

O que você pode fazer nesse caso antes de gravar o filtro na base, ou se você faz ele manual etc.

Troque o texto gravado no campo da tabela ‘[padm]’ por ‘#padm#’

E use o str_replace array na sua rotina assim que pegar a variável você troca a variável da tabela # por suas variáveis globais, em tempo de execução do código:

// Outputs F because A is replaced with B, then B is replaced with C, and so on…
// Finally E is replaced with F, because of left to right replacements.
$search = array(’#A#’, ‘#B#’, ‘#C#’, ‘#D#’, ‘#E#’);
$replace = array([A], [ B ], [C], [D], [E], [F]);
$subject = “SELECT * FROM tabela WHERE campo=’#A#’”;
echo str_replace($search, $replace, $subject);