Como usar um array dentro da cláusula IN do MySQL ???

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)

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

Outra coisa, não tem que ter um $i++ em algum lugar?
[]s

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.

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,

Como eu disse, ele não executa nada, dá o erro acima nessa linha, devo estar usando a sintaxe errada na clausula IN.

Ronaldo,
Coloca o echo “uma linha antes” do sc_exec_sql pra ver o que tá vindo na variável $dados.
[]s

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,

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

Tenta var_dump($dados); ao invés do echo

[]s

Aí beleza, veja a saída…

string(17) “A2M165S2,A2M165S1”

Aparentemente ok, a encrenca deve ser mesmo no uso da array no sql.

O campo IDMensagem é string (char ou varchar) no banco?
Se for substitua a linha:
$dados = implode(",",$ids);
por
$dados = “’”.implode("’,’",$ids)."’";

Allan,

Mesmo jeito. :frowning:

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)

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,

Consegui !!!

Se eu jogar a instrução sql para uma variável e depois usá-la dentro sc_exec_sql() não dá erro e funciona OK, vai entender, coisas do SC.

Ufa!!! Estava desde cedo nisso, finalmente resolviso, obrigado pela sua atenção e ajuda, valeu camarada.

Valeu.
Sempre a disposição.

http://php.net/manual/pt_BR/function.array-push.php, além de usar o array_push, você também pode usar assim: $var[] = $valor que é mais rápido que invocar uma função.