Som Mads Ravn siger, så bør man bruge PDOs og prepared statements. Det sikrer så ikke 100% mod SQL injection, medmindre man bruger det rigtigt :-)
Man kan jo stadig gøre noget i stil med:
$stmt = $pdo->prepare("SELECT * FROM some_table WHERE id=" . $id);