sql >> Database >  >> RDS >> Mysql

Werk kolommen bij als invoerwaarden niet null zijn, anders negeer en bewaar de bestaande waarden van kolom in database

U voegt de gebruikersnaam rechtstreeks in de SQL in zonder te escapen of zelfs maar te citeren. Ik denk dat je gewoon de apostrofs hebt gemist.

Om problemen met SQL-injectie te voorkomen, mag u NOOIT SQL-tekenreeksconstanten uit dynamische gegevens invoegen, ALTIJD PreparedStatement gebruiken en markeringen invoegen.

U kunt ook ontsnappen aan de waarden, maar het gebruik van markeringen is veel veiliger en verbetert de SQL-prestaties doordat de database de gecompileerde SQL-instructie in de cache kan opslaan.

String updateQuery = "UPDATE " + USER_TABLE +
                       " SET " + USER_TABLE_FIRST_NAME + "=IFNULL(? ," + USER_TABLE_FIRST_NAME + ")," +
                                 USER_TABLE_LAST_NAME + "=?," +
                                 USER_TABLE_ABOUT_ME + "=?," +
                                 USER_TABLE_CITY + "=?," +
                                 USER_TABLE_DOB + "=?" +
                     " WHERE " + USER_TABLE_ID + "=?";
PreparedStatement stmt = conn.prepareStatement(updateQuery);
stmt.setString(1, user.getFirstName());
stmt.setString(2, user.getLastName());
stmt.setString(3, user.getAboutMe());
stmt.setString(4, user.getCity());
stmt.setString(5, user.getDateOfBirth());
stmt.setString(6, user.getUserId());

Opmerking: Antwoord uitgebreid om het probleem met de nulcontrole te dekken.

Als u eenvoudige tekenreeksinjectie gebruikt, "A='" + name + "'" wordt A='Joe' voor een niet-null-waarde maar A='null' voor een null-waarde, wat absoluut niet is wat je wilt.

Door parametermarkeringen te gebruiken, wordt de waarde van ? kan null zijn , wat betekent dat IFNULL(?, Name) geeft het exacte gedrag dat nodig is, d.w.z. met behulp van de waarde van ? wanneer het niet null is, en de waarde van NAME wanneer ? is nul.



  1. Fout 1062 - Dubbele invoer '127' voor sleutel 'PRIMARY' - kan de reden niet vinden

  2. Bestandspad opslaan naar Database / SQL

  3. Invoegen van PHP-gegevensobject wordt niet uitgevoerd

  4. Hoe privileges aftrekken in MySQL