Placeholders in prepared statements can only be replaced with values, not just any string.
The fact is, the database driver parses (should parse) the query at prepare time, leaving markers for the missing values. When you substitute something, it is interpreted as a value. So, in your example, you were executing this: SELECT name FROM categories WHERE categories.workrelated = "('Y' || 'N')"; which I'm not surprised to notice didn't return any row.
The whole perparing business is intended to:
- ease quoting
- avoid parsing multiple similar queries
-- dakkar - Mobilis in mobile