PDO Fatal error: Call to a member function fetch() on boolean
Boa noite a todos,
Passei o projeto para PDO e está tudo aparentemente bem, porém o que antes era uma simples busca de 1 dado em cada select, agora se tornou vários dados em um select (limitei ele em maxOptions = 5), ok, até ai tudo bem, me virei aqui para fazer isso virar um array de dados. Atualmente o cenário é o seguinte:
Tenho estas variáveis que recebem um array, se eu der um echo em cada uma delas e preencher o meu select option com 2 ou mais dados, ela me retorna (2,5) ou (2,x,x,x números que eu quiser), ou até mesmo apenas um número. Ótimo, em tese está funcionando.
$tema = join(',',(array)$id_tema);
$autor = join(',',(array)$id_autor);
$chave = join(',',(array)$id_palchave);
$disciplina = join(',',(array)$id_disciplina);
Ai eu tenho um pequeno select que faz a magia da busca múltipla, neste select tenho algumas function de BD que concatena:
$sqlbusca = $conn->query("SELECT DISTINCT ARQ_ID,ARQ_NOME,conc_busca_autores(ARQ_ID) as AUT_NOME,
conc_busca_temas(ARQ_ID) as TEM_NOME,EDI_NOME, conc_busca_disciplina(ARQ_ID) as DIS_NOME,conc_busca_palchave(ARQ_ID) as PAL_CHA_NOME,
TIP_ARQ_NOME,ARQ_CAM_ARQ FROM `arquivos` a
INNER JOIN arquivos_has_disciplinas b ON a.ARQ_ID = b.Arquivos_ARQ_ID
INNER JOIN disciplinas dis ON b.Disciplinas_DIS_ID = dis.DIS_ID
INNER JOIN arquivos_has_temas c ON a.ARQ_ID = c.Arquivos_ARQ_ID
INNER JOIN temas tem ON c.Temas_TEM_ID = tem.TEM_ID
INNER JOIN autores_has_arquivos d ON a.ARQ_ID = d.Arquivos_ARQ_ID
INNER JOIN autores aut ON d.Autores_AUT_ID = aut.AUT_ID
INNER JOIN palavraschave_has_arquivos e ON a.ARQ_ID = e.Arquivos_ARQ_ID
INNER JOIN palavraschave pal ON e.PalavrasChave_PAL_CHA_ID = pal.PAL_CHA_ID
INNER JOIN editoras edi ON edi.EDI_ID = a.Editoras_idEditoras
INNER JOIN tipoarquivo tip ON tip.TIP_ARQ_ID = a.TipoArquivo_idTipoArquivo
where ( a.ARQ_NOME LIKE '$txtnomearquivo%' or '$txtnomearquivo' LIKE '' )
and ( a.editoras_ideditoras = $id_editora or $id_editora = 0 )
and ( a.TipoArquivo_idTipoArquivo = $id_ta or $id_ta = 0 )
and ( b.Disciplinas_DIS_ID in ($disciplina) or ($disciplina) = 0 )
and ( c.Temas_TEM_ID in($tema) or ($tema) = 0 )
and ( d.Autores_AUT_ID in ($autor) or ($autor) = 0 )
and ( e.PalavrasChave_PAL_CHA_ID in ($chave) or ($chave) = 0 )");
while ($linha = $sqlbusca->fetch(PDO::FETCH_ASSOC)) { ?>
//aqui vem a tabela, etc.
Eis a questão:
Se eu selecionar apenas 1 dado de apenas 1 select option ou de vários select options ou até mesmo parte do nome do arquivo(iniciais), ele me retorna perfeito, nada a fazer. O erro acontece no momento em que eu seleciono por exemplo, duas disciplinas, ou dois autores e coloco para busca. Coloquei um var_dump($sqlbusca).
retorno do var_dump => bool(false)
Fatal error: Call to a member function fetch() on boolean in C:\xampp\htdocs\ ...
" "SOLUÇÃO" " entre aspas [bug]
Se eu modificar (remover or ($disciplina) = 0)
and ( b.Disciplinas_DIS_ID in ($disciplina) or ($disciplina) = 0 )
Para
and ( b.Disciplinas_DIS_ID in ($disciplina) )
o var_dump mostra todo o sql e na onde eu coloco dois dados fica assim: and ( b.Disciplinas_DIS_ID in (2,4) )
Apenas fazendo esta alteração, eu consigo fazer a busca de 2 disciplinas ou mais na minha busca e funciona 100%. PORÉM O RESTO... Buga tudo, não consigo pesquisar nada a não ser apenas a disciplina. Já editei todos os outros para ficar igual disciplina e nada, já substitui o in por LIKE, já alterei o = 0 por LIKE '' e nada também.
Alguma luz no fim do túnel?
Discussão (5)
Carregando comentários...