sql >> Databasteknik >  >> RDS >> Oracle

Fel när data infogades med enkla citattecken mellan sig

Du bör inte skriva kod för att undkomma strängen. Det faktum att du behöver undkomma strängen innebär att du gör något fel.

Om du använder bindningsvariabler i din INSERT uttalande, kommer det inte att finnas något behov av att undkomma strängen när det finns ett enkelt citat. Det kommer inte heller att finnas något behov av att försöka identifiera SQL-injektionsattacker i strängen, vilket är ett stort säkerhetsproblem om du inte använder bindningsvariabler. Och du kommer inte att tvinga Oracle att analysera frågan varje gång den körs, vilket är avgörande för systemets prestanda.

Om proceduren du pratar om är skriven i PL/SQL, kommer den att använda bindningsvariabler automatiskt. Om du gissar på kolumnnamnen och antar att du använder en sekvens för att generera din primärnyckel, skulle du ha något sånt här

CREATE PROCEDURE insert_rtf_clob( p_clob IN NOCOPY CLOB )
AS
BEGIN
  INSERT INTO rtf_clob( rtf_clob_id, rtf_clob_value )
    VALUES( seq_rtf_clob_id.nextval, p_clob );
END;

Andra front-end-språk kommer att ha olika metoder för att använda bindningsvariabler. Om du till exempel skriver Java med JDBC, skulle du skapa en PreparedStatement och anrop sedan lämplig setXXX metoder, dvs.

PreparedStatement stmt = conn.prepareStatement( "INSERT INTO rtf_clob VALUES( ?, ? )" );
stmt.setInt( 1, 1 ); // Set column 1 to a value of 1
stmt.setString( 2, someStringVariable ); // Set column 2 to someStringVariable
stmt.executeUpdate();


  1. Hur lägger man till primärnyckel för automatisk ökning baserat på en kolumnordning?

  2. Sequelize — använd UNIX-tidsstämpel för DATE-fält

  3. Oracle 10g - Escape-citat i infoga uttalande

  4. Hur man får de senaste 3 månadernas försäljningsdata i MySQL