PHP PDO e Mysql

08/03/2015

Galera,
Tudo bom?
Estou precisando de uma ajuda

Estou com a sentança php pdo banco mysql:

$buscanoticia = $pdo->prepare("SELECT n.Id as IdNot, n.Titulo, n.Imagem, n.LegendaImagem, c.Id, c.Nome, n.Subtitulo, c.CSSClass
FROM noticias as n
INNER JOIN caderno c ON c.id = n.IdCaderno
WHERE n.IdArea = 4 AND n.Id NOT IN (:listanoticiashome)
ORDER BY n.Id DESC
LIMIT 4");
$buscanoticia->bindValue(":listanoticiashome",$listanoticias);
$buscanoticia->execute()

sendo que a variável $listanoticias tem os seguintes dados: 16551, 16550, 16468, 16430, 16429, 16280, 16547, 16546, 16545, 16544, 16549, 16548, 16542, 16549, 16548, 16542, 16549, 16548, 16542, 16541, 0

ao executar o comando via script php o resultado não respeita a condição where, n.id Not In e o conjunto de valores, me retorna os valores que esteja na lista, mas quero que os valores não retornem na pesquisa.

Peguei a query e coloquei direto no mysql, substituir a variável $listanoticias pelo seu valor mencionado, executado e funcionou bacana.
Pelo php e pdo não funciona, alguém pode me ajudar ai.

Obrigado.

PHP

Lelopes

Respostas

08/03/2015

William (devwilliam)

Olá Lelopes, infelizmente o PDO não consegue mapear esse tipo de parâmetro "coletivo", aconselho você a proceder dessa maneira mesmo não sendo a mais indicada por questões de SQL Injection.

$buscanoticia = $pdo->prepare("SELECT n.Id as IdNot, n.Titulo, n.Imagem, n.LegendaImagem, c.Id, c.Nome, n.Subtitulo, c.CSSClass 
FROM noticias as n
INNER JOIN caderno c ON c.id = n.IdCaderno
WHERE n.IdArea = 4 AND n.Id NOT IN ({$listanoticias}) 
ORDER BY n.Id DESC
LIMIT 4");
$buscanoticia->execute()
Responder Citar

09/03/2015

Lelopes

Willian,
Muito obrigado.
Ontem a noite li isso no manual php.
Os injections vou tratar de outra forma, na mão mesmo.

Valeu cara, ajudou muito.
Responder Citar