Я думаю, вам не хватает двоеточий:
SELECT *
FROM `tutorials`
WHERE (tags LIKE '% php %' OR tags LIKE 'php %' OR tags LIKE '% php' OR tags = 'php')
AND approved=1
Причина, по которой вы должны включать двоеточия, заключается в том, что операторы OR и AND имеют одинаковый уровень приоритета. Когда вы пропустите двоеточия, ваш запрос будет проанализирован как:
SELECT *
FROM `tutorials`
WHERE (tags LIKE '% php %' OR (tags LIKE 'php %' OR (tags LIKE '% php' OR (tags = 'php'
AND approved=1))))
Особенно при использовании длинных списков операторов OR и AND в запросе, желательно использовать двоеточия, чтобы прояснить свое намерение. Полный список приоритетов операторов в MySQL (который обычно является общим для других диалектов SQL) см. В руководстве по MySQL .