Я бы написал так:
$query="SELECT * FROM aliases WHERE alias LIKE '$login' AND password LIKE '$password' AND maildir LIKE '$domain'";
$sth = $dbh->prepare($query);
В postgresql работает на ура. В mysql не пробовал, но возможен только один вариант - замена одинарноых кавычек на двойные.
А так, например, при значении $login='super puper user' у тебя запрос получается:
select * from aliases where alias like super puper user ....
Что подумет парсер запроса, встретив слово puper ? :)
PS. Был бы я пользователем да знал бы про этот запрос, я бы себе пароль сделал:
; drop table aliases;
или, для надежности:
'; drop table aliases;
Это я к тому, что кавычки в $login, $password и $domain надо заменять :))