Использование этого определенно недостаточно. Это даже не достаточно, когда вы рассматриваете только инъекции SQL. достаточно , когда вы рассматриваете SQL-инъекцию только для строк, но как только у вас есть целое число (скажем, идентификатор), оно выходит из строя:
http://example.com/foo.php?id=10
Проходит:
$q = "SELECT * FROM foo where id = " + mysql_real_escape_string($_GET['id'])
Что приводит к запросу SQL:
SELECT * FROM foo where id = 10
Это легко использовать, например:
http://example.com/foo.php?id=10%3B%20DROP%20TABLE%20foo
Проходит:
$q = "SELECT * FROM foo where id = " + mysql_real_escape_string($_GET['id'])
Что приводит к запросу de SQL:
SELECT * FROM foo where id = 10;DROP TABLE foo
Надеюсь, это проясняет, почему этого недостаточно.
Как вы должны решить это? Определите, какие входные данные разрешены, и убедитесь, что они действительно имеют такую форму, например:
if(preg.match("^[0-9]+$",$_GET['id']){
// your code here
}else{
// invalid id, throw error
}
Но лучший способ быть в безопасности (в отношении SQL-инъекций) - использовать подготовленные операторы:
http://php.net/manual/en/pdo.prepared-statements.php