Array
(
)

PHP PDO e Mysql

PHP
Lelopes
   - 08 mar 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.

William (devwilliam)
   - 08 mar 2015

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.

#Código

$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()

Lelopes
   - 09 mar 2015

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.