The answer to your question is No.  mysql_real_escape_string() is not suitable for all user input and mysql_real_escape_string() does not stop all sql injection.  addslashes() is another popular function to use in php, and it has the same problem. 
vulnerable code:
mysql_query("select * from user where id=".mysql_real_escape_string($_GET[id]));
poc exploit:
http://localhost/sql_test.php?id=1 or sleep(500)
The patch is to use quote marks around id:
mysql_query("select * from user where id='".mysql_real_escape_string($_GET[id])."'");
Really the best approach is to use parametrized queries which a number of people ahve pointed out.  Pdo works well,  adodb is another popular library for php. 
If you do use mysql_real_escape_string is should only be used for sql injection,  and nothing else.  Vulnerabilities are highly dependent on how the data is being used. One should apply security measures on a function by function basis.  And yes,  XSS is a VERY SERIOUS PROBLEM.   Not filtering for html is a serious mistake that a hacker will use to pw3n you.   Please read the xss faq.