Auf Thema antworten

Also nur um es noch einmal zu unterstreichen: Das Problem ist doch offensichtlich und es ist keine weitere Analyse notwendig. Es muss nur einfach einmal vernünftiger Code geschrieben werden.


Daher noch einmal: In Java werden PreparedStatements verwendet. Der Link, den ich gebracht habe, erläutert dies auch. Das Beispiel auf der Seite ist z.B.:


[CODE=java]  public void updateCoffeeSales(HashMap<String, Integer> salesForWeek) throws SQLException {

    String updateString =

      "update COFFEES set SALES = ? where COF_NAME = ?";

    String updateStatement =

      "update COFFEES set TOTAL = TOTAL + ? where COF_NAME = ?";


    try (PreparedStatement updateSales = con.prepareStatement(updateString);

         PreparedStatement updateTotal = con.prepareStatement(updateStatement))

  

    {

      con.setAutoCommit(false);

      for (Map.Entry<String, Integer> e : salesForWeek.entrySet()) {

        updateSales.setInt(1, e.getValue().intValue());

        updateSales.setString(2, e.getKey());

        updateSales.executeUpdate();


        updateTotal.setInt(1, e.getValue().intValue());

        updateTotal.setString(2, e.getKey());

        updateTotal.executeUpdate();

        con.commit();

      }

    } catch (SQLException e) {

      JDBCTutorialUtilities.printSQLException(e);

      if (con != null) {

        try {

          System.err.print("Transaction is being rolled back");

          con.rollback();

        } catch (SQLException excep) {

          JDBCTutorialUtilities.printSQLException(excep);

        }

      }

    }

  }[/CODE]


Und das der SQL Befehl


[ICODE]DELETE FROM `Products` WHERE `id`= id[/ICODE]

alles löscht, ist doch klar:

Alle Zeilen, bei denen die id gleich der id ist, werden gelöscht.


Aber das War ja auch nie die Aussage. Die Beschreibung zeigt es deutlich und [USER=61189]@LimDul[/USER] hat es auch noch einmal gesagt:

Er wird mit Platzhaltern gearbeitet!


Also dann etwas wie

[ICODE]DELETE FROM `Products` WHERE `id`= ?[/ICODE]

Und dann muss das als PreparedStatement angelegt werden und der Parameter muss gesetzt werden (Sowas wie statement.setInt(1, getId());



Und um es noch einmal ganz deutlich zu sagen: Es werden keine SQL befehle zusammen gestückelt. Der TE schreibt laut Titel einen Webservice!


Und auch in PHP muss man keine SQL Befehle zusammen stückeln. Auch da gibt es PreparedStatements: https://www.w3schools.com/php/php_mysql_prepared_statements.asp


Und nur um es noch einmal einzuordnen: Das ist grob fahrlässiges Verhalten! Diese SQL Injection Attacken will man nicht! Daher: [USER=51169]@Henri[/USER] und [USER=65838]@Joreyk[/USER]: Lest euch den Inhalt der Links durch. Versucht es zu verstehen. Das ist nichts, das unwichtig oder nice to have wäre.



Oben