Подстановка переменных работает только в двойных кавычках.
Попробуйте это:
$uid = 8;
$str = "SELECT COUNT(*) FROM uchome_blog WHERE uid=$uid"; # variable gets substituted here
eval("\$str = \"$str\"");
die("$str");
Я думаю, что подстановка переменных - это то, что происходит во время разбора - это не делается рекурсивно, поэтому в вашем eval
содержимое $str
вставляется в строку, но это не делается во второй раз содержимое $uid
внутри $str
.