20% OFF para compra e renovaÇÃo »

Autor Tópico: SC_LOOKUP + CURL = Mysql server has gone away  (Lida 95 vezes)

patrick

  • Novato
  • *
  • Mensagens: 2
SC_LOOKUP + CURL = Mysql server has gone away
« Online: Outubro 08, 2018, 09:29:09 am »
Olá,

Tenho uma aplicação do tipo blank, e nela tenho um código semelhante ao abaixo:

Código: [Selecionar]
$sql1 = "comando SELECT SQL";
sc_lookup(rst1, $sql1);

foreach({rst1} as $v)
{
    $sql2 = "COMANDO SELECT SQL";
    sc_lookup(rst2, $sql2);

   foreach({rst2} as $v2)
  {
      /*CODIGO PARA COMUNICACAO EXTERNA VIA CURL*/
  }
}

O código acima apenas executa um select e pra cada registro percorrido executa outro e também o percorre, e para cada item é executado o CURL para outro servidor, e propositalmente este script chamado consome 4 segundos para responder.

E como resultado após 10 segundos o erro mysql server has gone away PDO:execute() é retornado.

Mesmo que eu faça os selects acima, armazene o resultado em outro array, e depois faça a conexão com CURL o erro é o mesmo.

Precisaria ajustar esse tempo no BD, mas não tenho essa opção por ser compartilhado.

A solução é abrir a conexão e fechar em seguida, para cada ciclo do foreach, dessa forma o tempo limite não será excedido. Utilizando os comandos nativos do PHP é possível fazer isso, porém perco as facilidades de gerenciamento de conexões do scriptcase (V9), que é não precisar deixar senha e usuário e host no código fonte, e sim num gerenciador do scriptcase.

Não encontrei alguma macro do scriptcase para fazer abertura e fechamento de conexão.

Alguém pode me dar uma força?

Obrigado desde já.

Jailton

  • Expert
  • *****
  • Mensagens: 2695
Re:SC_LOOKUP + CURL = Mysql server has gone away
« Responder #1 Online: Outubro 08, 2018, 10:31:53 am »
O sc_lookup é só usado para checar se um registro existe ou pegar uns campos de retorno de um registro.


Para abrir uma tabela / SQL para rotinas que vão retornar várias linhas/registros, use o sc_select,
com o sc_select, você pode fechar a conexão depois de usar.

Modelo Exemplo do uso do sc_lookup:
Código: [Selecionar]
/* Macro sc_select */

$sql ="
SELECT
    CodigoClienteID,
    NomeCliente,
    CPF
FROM
    clientes
";

sc_select(meus_dados, $sql);

/* Erro no select */
if ({meus_dados} === false) {
     // Sua Base + _erro
sc_error_message("Ocorreu um erro no acesso ao<BR>banco de dados: {meus_dados_erro}.<BR>");
}
else {

/* Inclua aqui sua rotina de processamento */

// Qtde de Registros Retornados.
$QtdeRegistros=$meus_dados->RecordCount();

     if ($meus_dados->EOF) {

         sc_error_message("Nenhum valor foi retornado pelo banco.<BR>");

} else {

while (!$meus_dados->EOF) {

{CodigoClienteID} = $meus_dados->fields[0]; // ou $meus_dados->fields['CodigoClienteID']
{NomeCliente} = $meus_dados->fields[1]; // ou $meus_dados->fields['NomeCliente']
{CPF} = $meus_dados->fields[2]; // ou $meus_dados->fields['CPF']

// Avança para o próximo registro do BANCO DE DADOS.
$meus_dados->MoveNext();

} // while (!$meus_dados->EOF)

} // if ($meus_dados->EOF)

// Limpa tudo até a conexão
$meus_dados->Close();

} // sc_select(meus_dados,    ** Nao deixar aspas aqui...
O Princípio da Vibração. "Nada está parado, tudo se move, tudo vibra". Caibalion.

patrick

  • Novato
  • *
  • Mensagens: 2
Re:SC_LOOKUP + CURL = Mysql server has gone away
« Responder #2 Online: Outubro 10, 2018, 01:14:49 pm »
Resolveu o problema, muito obrigado!