I think you are missing some colons:
SELECT *
FROM `tutorials`
WHERE (tags LIKE '% php %' OR tags LIKE 'php %' OR tags LIKE '% php' OR tags = 'php')
AND approved=1
The reason you should include colons, is because OR and AND operators are on the same level of precedence. When you omit the colons, your query would be parsed as:
SELECT *
FROM `tutorials`
WHERE (tags LIKE '% php %' OR (tags LIKE 'php %' OR (tags LIKE '% php' OR (tags = 'php'
AND approved=1))))
Especially when using long lists of OR and AND operators in a query, it is advisable to use colons to make your intent clear. For a full list of the operator precedence in MySQL (which is generally common to other SQL dialects), see the MySQL manual.