[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
Thiago Silva
Criador Thiago Silva 18/07/2023

Boas Tarde, eu tenho uma query gigante pra executar num segundo banco de dados, essa query é cheia de lef join, inner, select dentro de select mantei ela dentro de uma variável concatenando linha por linha, e utilizei o DB::connection('sqlsrv)->select($sql), e coloquei um dd na variavel que recebe esse valor e está me retornando apenas [], fiz o teste com uma consulta mais simples e funcionou, somente essa gigante.

Manager Carlos Ferreira 18/07/2023

Olá, Thiago!
Como vai?

Certo, e qual o conteúdo da variável $sql?
Pode ser que está passando algum caractere especial, que zerou a sua query.

E com statement ao invés de select, o que acontece?

Carlos Ferreira
Criador Thiago Silva 18/07/2023
$sql = "select c.cd_devedor,ds_credor,sum(vl_capital) as Saldo,datediff(day,min(dt_vencimento),getdate()) as Atraso,alo,cpc,sms,ura,alega,positivo,telef from contrato c (nolock)";
$sql .= " inner join credor cr (nolock) on c.cd_credor = cr.cd_credor";
$sql .= " left join (select cd_devedor, sum(Alo) As Alo, sum(CPC) CPC, sum(sms) SMS, sum(ura) URA, sum(Alega) Alega, sum(Positivo) Positivo";
$sql .= " from (select o.cd_devedor, o.dt_ocorrencia,";
$sql .= " case";
$sql .= " when o.cd_historico in (1,2,3,4,5,6,7,8,9,10,18,21,25,31,32,50,220,222,3616,245,246,261,267,268,310,400,405,410,420,425,430,455,470,503,504,505,547,554,550,221,56,55,501,57,204,205,209,210) then 1";
$sql .= " else 0";
$sql .= " end as Alo,";
$sql .= " case";
$sql .= " when o.cd_historico in (3,4,5,7,8,10,21,22,23,50,52,55,102,204,205,221,245,310,405,410,420,473,501,502,503,504,547,577,590,714,715,716,717,718,719,720,4503136) then 1";
$sql .= " else 0";
$sql .= " end as CPC,";
$sql .= " case";
$sql .= " when o.cd_historico in (3,5,8,10,21,52,204,221,245,267,310,209,210) then 1";
$sql .= " else 0";
$sql .= " end as 'Target',";
$sql .= " case";
$sql .= " when o.cd_historico in (11) then 1";
$sql .= " else 0";
$sql .=" end as 'SMS',";
$sql .= " case";
$sql .= " when o.cd_historico in (13) then 1";
$sql .= " else 0";
$sql .= " end as 'URA',";
$sql .= " case";
$sql .= " when o.cd_historico in (3,21) then 1";
$sql .= " else 0";
$sql .= " end as 'Positivo',";
$sql .= " case";
$sql .= " when o.cd_historico in (5) then 1";
$sql .= " else 0";
$sql .= " end as 'Alega'";
$sql .= " from ocorrencia o (nolock)";
$sql .= " where dt_ocorrencia between '20230717' and '20230717'";
$sql .= " and o.cd_credor in (10040,10041,10049,10053,10057,10062,10063,10065,60025,60030)) as ss";
$sql .= " group by cd_devedor) as abb on abb.cd_devedor = c.cd_devedor";
$sql .=" left join (select cd_devedor, count(*) as Telef from devedortelefone";
$sql .=" where cd_classificacao in ('H','C','N','P')";
$sql .=" group by cd_devedor) as tel on tel.cd_devedor = c.cd_devedor";
$sql .= " where c.cd_credor in (10040,10041,10049,10053,10057,10062,10063,10065,60025,60030)";
$sql .= " and dt_disponibilizacao >= '2023-07-01'";
$sql .= " group by c.cd_devedor,ds_credor,alo,cpc,sms,ura,alega,positivo,telef";
Thiago Silva
Criador Thiago Silva 18/07/2023
$dbmscobranca = DB::connection('sqlsrv')->select($sql);

dd($dbmscobranca);
Thiago Silva
Criador Thiago Silva 18/07/2023

Se eu der um print nessa variavel e pegar a string e jogar no banco a consulta funciona

Thiago Silva
Manager Carlos Ferreira 18/07/2023

E quando roda outra query mais simples, dessa forma, funciona?
$dbmscobranca = DB::connection('sqlsrv')->select("select * from table yyyyyy");

Carlos Ferreira
Criador Thiago Silva 18/07/2023

Sim funciona, normal

Thiago Silva
Manager Carlos Ferreira 18/07/2023

Não sei se vai resolver, mas experimenta trocar os values por ?, isso ajuda até evitar sql injection:
$dbmscobranca = DB::connection('sqlsrv')->select("select * from table where id = ? ", [$id]);

Carlos Ferreira
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!