I think you would want to use LEFT or INNER joins and not RIGHT joins, since the products is the main table you want to always return results from.
Then I think you may be joining on the wrong columns... for example you have: products.ProductManufacturerID = productmanufacturers.ManufacturerName
shouldn't it be: products.ProductManufacturerID = productmanufacturers.ManufacturerID
My guess is that the full query you want is:
SELECT products.*, productmanufacturers.ManufacturerName , productcategories.CategoryName FROM products INNER JOIN productmanufacturers ON products.ProductManufacturerID = productmanufacturers.ManufacturerID INNER JOIN productcategories ON products.ProductCategoryID = productcategories.CategoryID WHERE products.ProductLive = 1 ORDER BY Rand()