$clause = " OR ";//Change to OR after 1st WHERE
O operador OR acima fará com que seus critérios where selecionem um registro, mesmo que 1 palavra-chave corresponda ao campo attr. Altere-o para " AND " para que todas as palavras-chave sejam aplicadas.
Além disso, ... AND ATTRIBUTES.sub_cat_name='$currentproduct'" critério parece se aplicar a todas as palavras-chave, então este critério deve ser adicionado uma vez, não em cada iteração do loop. $currentproduct =$_POST['product']; linha também deve ser movida para frente do loop.
EDIT:para refletir a alteração do opreator para AND e não ter nenhuma linha retornada.
...ATTRIBUTES.attr LIKE BINARY '$c'...
Se não houver curingas em $c, o critério acima exigirá que a palavra corresponda ao campo attr como se o operador =tivesse sido usado, o que é improvável de acontecer. Os curingas devem ser incluídos na pesquisa:'%$c%'
Além disso, alguma proteção contra injeção de sql também seria bom.
EDIT2:Se cada atributo for armazenado em seu próprio registro, isso complica um pouco as coisas, já que os critérios where são avaliados em relação a um único registro, não a uma coleção deles.
Eu lhe darei um exemplo de comando select, mas você terá que incorporá-lo ao seu código php.
select product_details.* FROM product_details INNER JOIN
(select product_details.id, count(ATTRIBUTES.id) as total
FROM `product_details`
INNER JOIN `ATTRIBUTES` ON product_details.id=ATTRIBUTES.id
WHERE ATTRIBUTES.attr in (...)
GROUP BY product_details.id
HAVING total=...) as t
on t.id=product_details.id
A subconsulta conta quantos atributos foram correspondidos para um produto e os elimina, onde a contagem não é igual ao número de parâmetros enviados por meio do formulário. A consulta externa obtém os detalhes do produto para aqueles em que a contagem corresponde.
Para o ... na cláusula in(), você precisa fornecer uma lista de palavras-chave separada por vírgulas, como:"'computer', 'apple'". Use a função implode() na concatenação php e szstring para obter os resultados.
Para o ... na cláusula having, substitua o número de palavras-chave no array $_POST['keyword'] (você deve verificar no código se é um array ou apenas um valor único).
Ainda assim, você deve considerar o impacto da injeção de sql em seu código.