[java]Addslashes

Pagina: 1
Acties:

  • bibawa
  • Registratie: Augustus 2005
  • Laatst online: 13-04-2008
Ik zou gegevens naar een databank moeten ophalen adhv gegevens die de gebruiker invult.
Omdat deze gegevens ' en " kunnen bevatten en m'n query is opgebouwd als volgt:

Java:
1
String qry ="Select COUNT(*) FROM leden WHERE gebruikersnaam=' "+txtGebruikersnaam.getText()+" ' ";


(zonder de spaties tussen " en ' , is om het duidellijk te laten zien !)

Als er in die input velden ' of " wordt ingevuld dan vertrekt m'n query natuurllijk niet !

In php zou ik dit simpel oplossen dmv addslashes maar wat kan ik hiervoor gebruiken in Java?

[ Voor 1% gewijzigd door RobIII op 25-04-2007 13:11 ]


  • Treenaks
  • Registratie: April 2001
  • Laatst online: 01-12 15:44
Placeholders en prepared queries (daarmee zou je verder moeten kunnen zoeken :))

Sun heeft zelfs een tutorial voor prepared statements + JDBC: http://java.sun.com/docs/...jdbc/basics/prepared.html

[ Voor 45% gewijzigd door Treenaks op 24-04-2007 23:07 ]


  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Je moet inderdaad PreparedStatement gebruiken. Zie ook Voorbereide statementen

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

bibawa schreef op dinsdag 24 april 2007 @ 23:05:
Als er in die input velden ' of " wordt ingevuld dan vertrekt m'n query natuurllijk niet !
Wat heeft die " ermee te maken? Of is dat bij mysql tegenwoordig nog steeds problematisch?
In php zou ik dit simpel oplossen dmv addslashes maar wat kan ik hiervoor gebruiken in Java?
Addslashes is helemaal niet de goede oplossing in php ;) (daar heb je de *_escape_string-functies voor)
Bovendien hoor je voor SQL de ' te escapen door er nog een ' voor te zetten, ipv een \, maar of MySQL dat (in versie 5) tegenwoordig ook accepteert weet ik niet.

Magoed, zie de anderen, prepared statements zijn bijna altijd de beste manier, scheelt je ook eventuele stringformatting voor bijvoorbeeld datum-velden en floating points. En zeker als je de queries vaak herhaalt is het wel aardig dat een deel normale overhead bespaard kan worden met prepared statements.

[ Voor 7% gewijzigd door ACM op 25-04-2007 08:44 ]


Verwijderd

Ik heb daar toevallig zelf iets voor geschreven onlangs. En dat werkt toch... Het is misschien wel niet de goede manier om het te doen?
Java:
1
2
3
4
5
6
7
8
9
10
11
12
public static String setEscapes(String string){
        if(string==null){
            return string;
        }
        string=string.replace("/","\\/");
        string=string.replace("\'","\\\'");
        string=string.replace("_","\\_");
        string=string.replace("0","\\0");
        string=string.replace("%","\\%");
        string=string.replace("\"","\\\"");
        return string;
    }

  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Je was blijkbaar gewoon niet op de hoogte van de mogelijkheden van de standaard JDBC API.

Nu weet je het en nu kun je er je voordeel mee doen als je wilt :)

[ Voor 4% gewijzigd door BalusC op 25-04-2007 13:01 ]

Pagina: 1