Autor Tópico: Como usar um array dentro da cláusula IN do MySQL ???  (Lida 424 vezes)

R.O.N.A.L.D.O

  • Avançado
  • ****
  • Mensagens: 493
    • RC Sistemas Soluções Informáticas
    • Email
Como usar um array dentro da cláusula IN do MySQL ???
« Online: Janeiro 21, 2016, 10:48:00 am »
Meus Caros,

Estou precisando executar um UPDATE seletivo com base nos IDs que estão dentro de uma array, mas está dando erro de sintaxe, vejam como eu estou fazendo e me corrijam por favor.

$ids = array;

$i=0;
foreach ($responses as $response)  {

   $idmsg   = $msg_list[$i];

   array_push($ids,$idmsg);
}

$dados = implode(",",$ids);
sc_exec_sql("UPDATE mensagens_envios SET Status=100 WHERE IDMensagem IN(".$dados.");";

O erro que o SC me retorna é o seguinte:
pharse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING)


Ronaldo Cocuroci
Analista de Sistemas
RC Sistemas Soluções Informáticas
www.rc-sistemas.com

Allan Medeiros

  • Expert
  • *****
  • Mensagens: 504
    • Email
Re:Como usar um array dentro da cláusula IN do MySQL ???
« Responder #1 Online: Janeiro 21, 2016, 10:51:51 am »
Não seria $idmsg   = $response[$i]; ao invés de  $idmsg   = $msg_list[$i]; ?
Manda o resultado de echo "UPDATE mensagens_envios SET Status=100 WHERE IDMensagem IN ($dados)" colocado antes do sc_exec_sql
[]s
Allan Medeiros
Analista de Informática
__________________________________________
Companhia de Processamento de Dados da Paraíba
medeiros@codata.pb.gov.br

Allan Medeiros

  • Expert
  • *****
  • Mensagens: 504
    • Email
Re:Como usar um array dentro da cláusula IN do MySQL ???
« Responder #2 Online: Janeiro 21, 2016, 10:53:06 am »
Outra coisa, não tem que ter um $i++ em algum lugar?
[]s
Allan Medeiros
Analista de Informática
__________________________________________
Companhia de Processamento de Dados da Paraíba
medeiros@codata.pb.gov.br

R.O.N.A.L.D.O

  • Avançado
  • ****
  • Mensagens: 493
    • RC Sistemas Soluções Informáticas
    • Email
Re:Como usar um array dentro da cláusula IN do MySQL ???
« Responder #3 Online: Janeiro 21, 2016, 10:57:42 am »
Vejam minha gente, eu não coloquei o código completo, até por que tem muita coisa no meio, o erro ocorre na instrução do SQL, acho que não estou usando a array corretamente na instrução do mysql.
Ronaldo Cocuroci
Analista de Sistemas
RC Sistemas Soluções Informáticas
www.rc-sistemas.com

Allan Medeiros

  • Expert
  • *****
  • Mensagens: 504
    • Email
Re:Como usar um array dentro da cláusula IN do MySQL ???
« Responder #4 Online: Janeiro 21, 2016, 11:01:57 am »
Então coloca
echo "UPDATE mensagens_envios SET Status=100 WHERE IDMensagem IN ($dados)"
antes do sc_exec_sql e diz o que saiu
Allan Medeiros
Analista de Informática
__________________________________________
Companhia de Processamento de Dados da Paraíba
medeiros@codata.pb.gov.br

R.O.N.A.L.D.O

  • Avançado
  • ****
  • Mensagens: 493
    • RC Sistemas Soluções Informáticas
    • Email
Re:Como usar um array dentro da cláusula IN do MySQL ???
« Responder #5 Online: Janeiro 21, 2016, 11:05:28 am »
Allan,

Como eu disse, ele não executa nada, dá o erro acima nessa linha, devo estar usando a sintaxe errada na clausula IN.
Ronaldo Cocuroci
Analista de Sistemas
RC Sistemas Soluções Informáticas
www.rc-sistemas.com

Allan Medeiros

  • Expert
  • *****
  • Mensagens: 504
    • Email
Re:Como usar um array dentro da cláusula IN do MySQL ???
« Responder #6 Online: Janeiro 21, 2016, 11:08:37 am »
Ronaldo,
Coloca o echo "uma linha antes" do sc_exec_sql pra ver o que tá vindo na variável $dados.
[]s
Allan Medeiros
Analista de Informática
__________________________________________
Companhia de Processamento de Dados da Paraíba
medeiros@codata.pb.gov.br

Allan Medeiros

  • Expert
  • *****
  • Mensagens: 504
    • Email
Re:Como usar um array dentro da cláusula IN do MySQL ???
« Responder #7 Online: Janeiro 21, 2016, 11:10:22 am »
outra coisa,
Tá faltando um parenteses na tua linha:

sc_exec_sql("UPDATE mensagens_envios SET Status=100 WHERE IDMensagem IN(".$dados.");";

o certo seria:
sc_exec_sql("UPDATE mensagens_envios SET Status=100 WHERE IDMensagem IN(".$dados.");");

ou assim:
sc_exec_sql("UPDATE mensagens_envios SET Status=100 WHERE IDMensagem IN($dados);");

[]s
Allan Medeiros
Analista de Informática
__________________________________________
Companhia de Processamento de Dados da Paraíba
medeiros@codata.pb.gov.br

R.O.N.A.L.D.O

  • Avançado
  • ****
  • Mensagens: 493
    • RC Sistemas Soluções Informáticas
    • Email
Re:Como usar um array dentro da cláusula IN do MySQL ???
« Responder #8 Online: Janeiro 21, 2016, 11:16:48 am »
Allan,

O paranteses realmente aqui está faltando, mas mesmo colocando o erro persiste.

Se eu der um echo somente na instrução ele dá um outro erro:

Array to string conversion
Ronaldo Cocuroci
Analista de Sistemas
RC Sistemas Soluções Informáticas
www.rc-sistemas.com

Allan Medeiros

  • Expert
  • *****
  • Mensagens: 504
    • Email
Re:Como usar um array dentro da cláusula IN do MySQL ???
« Responder #9 Online: Janeiro 21, 2016, 11:25:47 am »
Tenta var_dump($dados); ao invés do echo

[]s
Allan Medeiros
Analista de Informática
__________________________________________
Companhia de Processamento de Dados da Paraíba
medeiros@codata.pb.gov.br

R.O.N.A.L.D.O

  • Avançado
  • ****
  • Mensagens: 493
    • RC Sistemas Soluções Informáticas
    • Email
Re:Como usar um array dentro da cláusula IN do MySQL ???
« Responder #10 Online: Janeiro 21, 2016, 11:28:58 am »
Aí beleza, veja  a saída....

string(17) "A2M165S2,A2M165S1"

Aparentemente ok, a encrenca deve ser mesmo no uso da array no sql.
Ronaldo Cocuroci
Analista de Sistemas
RC Sistemas Soluções Informáticas
www.rc-sistemas.com

Allan Medeiros

  • Expert
  • *****
  • Mensagens: 504
    • Email
Re:Como usar um array dentro da cláusula IN do MySQL ???
« Responder #11 Online: Janeiro 21, 2016, 11:31:24 am »
O campo IDMensagem é string (char ou varchar) no banco?
Se for substitua a linha:
$dados = implode(",",$ids);
por
$dados = "'".implode("','",$ids)."'";
Allan Medeiros
Analista de Informática
__________________________________________
Companhia de Processamento de Dados da Paraíba
medeiros@codata.pb.gov.br

R.O.N.A.L.D.O

  • Avançado
  • ****
  • Mensagens: 493
    • RC Sistemas Soluções Informáticas
    • Email
Re:Como usar um array dentro da cláusula IN do MySQL ???
« Responder #12 Online: Janeiro 21, 2016, 11:37:40 am »
Allan,

Mesmo jeito. :(
Ronaldo Cocuroci
Analista de Sistemas
RC Sistemas Soluções Informáticas
www.rc-sistemas.com

R.O.N.A.L.D.O

  • Avançado
  • ****
  • Mensagens: 493
    • RC Sistemas Soluções Informáticas
    • Email
Re:Como usar um array dentro da cláusula IN do MySQL ???
« Responder #13 Online: Janeiro 21, 2016, 11:40:35 am »
A bronca é na instrução sql:

Já tentei assim:
sc_exec_sql('UPDATE mensagens_envios SET Status=100 WHERE IDMensagem IN($dados);');

Assim:
sc_exec_sql('UPDATE mensagens_envios SET Status=100 WHERE IDMensagem IN('.$dados.');');

Assim
sc_exec_sql('"UPDATE mensagens_envios SET Status=100 WHERE IDMensagem IN('$dados');");

E sempre dá erro, nem executa.

Dá esse tipo de erro na linha da instrução:
Parse error: syntax error, unexpected 'scriptcase' (T_STRING)

ou
Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING)



Ronaldo Cocuroci
Analista de Sistemas
RC Sistemas Soluções Informáticas
www.rc-sistemas.com

Allan Medeiros

  • Expert
  • *****
  • Mensagens: 504
    • Email
Re:Como usar um array dentro da cláusula IN do MySQL ???
« Responder #14 Online: Janeiro 21, 2016, 11:46:34 am »
Tenta assim:

$ids = array;
$i=0;
foreach ($responses as $response)  {
   $idmsg   = $msg_list[$i];
   array_push($ids,$idmsg);
}
$dados = implode("','",$ids);
sc_exec_sql("UPDATE mensagens_envios SET Status=100 WHERE IDMensagem IN ('$dados');");

Me diz o erro.
Allan Medeiros
Analista de Informática
__________________________________________
Companhia de Processamento de Dados da Paraíba
medeiros@codata.pb.gov.br