Java équivalent pour PHP mysql_real_escape_string()

Est-il un Java équivalent à PHP mysql_real_escape_string() ?

C'est pour échapper à l'injection SQL tentatives avant de les transmettre à l'état.execute().

Je sais que je peux utiliser PreparedStatement au lieu de cela, mais supposons que ce sont des one shot pour la préparation, vous aurez une baisse de rendement. J'ai déjà changé le code pour utiliser PreparedStatement, mais étant donné la manière dont le code existant a été structurée, une fonction escape() rendrait le code des changements beaucoup plus simples à l'examen et à entretenir; je préfère facile pour la maintenance du code, sauf s'il existe une raison impérieuse pour la supplémentaire de complexité. Aussi PreparedStatements sont traités différemment par la base de données, ce qui pourrait nous exposer à des bugs dans la base de données que nous n'avons pas rencontré avant, exigeant plus de tests avant de le relâcher à la production.

Apache StringEscapeUtils escapeSQL() s'échappe uniquement des guillemets simples.

Postscript:
Il y a beaucoup de subtilités dans l'environnement, j'ai hérité que j'ai délibérément évité dans ma question.

Deux points à considérer:

1) les requêtes Préparées ne sont pas une panacée et ne fournissent pas une protection à 100% contre les injections SQL. Certains pilotes de base de données à instancier de paramétrer des requêtes à l'aide dangereux de concaténation de chaîne, plutôt que de pré-compilation de la requête à une forme binaire. Aussi, si votre SQL s'appuie sur des procédures stockées, vous devez vous assurer que les procédures stockées ne sont pas eux-mêmes de créer des requêtes de manière non sécurisée.

2) la Plupart de l'instruction préparée de mise en œuvre de lier l'état de la connexion à la base de la déclaration a été instancié. Si vous utilisez la connexion de base de données de mise en commun, vous avez besoin d'être prudent afin d'
utiliser l'instruction préparée référence uniquement à la connexion, il a été préparé. Certains mécanismes de mise en commun de ne mettre en œuvre ce de manière transparente. Sinon, vous pourriez piscine les déclarations préparées ou (plus simple, mais plus de surcharge) créer une nouvelle instruction préparée pour chaque requête.

Vous préférez facile pour la maintenance du code, et pourtant vous préférez utiliser le manuel de l'échappement de la chaîne plutôt que de PrearedStatement?
Compte tenu de la façon dont le code existant (que je n'ai pas l'écrire), c'est, oui, il serait plus facile à maintenir.
la baisse de rendement peut être plus attrayant que le risque de sécurité. la sécurité de la pénalité peut juste être trop élevé. Préparez vos déclarations dans la demande de l'initialisation du code et de la peine ne peut être sensible (dépend de l'application, bien sûr).

OriginalL'auteur Kieran Tully | 2009-06-19