sql >> Database teknologi >  >> RDS >> Oracle

Fejl under indsættelse af data med enkelte anførselstegn imellem sig

Du bør ikke skrive kode for at undslippe strengen. Det faktum, at du skal undslippe strengen, betyder, at du gør noget forkert.

Hvis du bruger bindevariabler i din INSERT sætning, vil der ikke være behov for at undslippe strengen, når der er et omstrejfende enkelt citat. Der vil heller ikke være behov for at forsøge at identificere SQL-injektionsangreb i strengen, hvilket er et stort sikkerhedsproblem, hvis du ikke bruger bindevariabler. Og du vil ikke tvinge Oracle til at parse forespørgslen, hver gang den udføres, hvilket er afgørende for systemets ydeevne.

Hvis proceduren du taler om er skrevet i PL/SQL, vil den automatisk bruge bindevariabler. Hvis du gætter på kolonnenavnene og antager, at du bruger en sekvens til at generere din primære nøgle, ville du have noget som dette

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;

Andre frontend-sprog vil have forskellige tilgange til at bruge bindevariabler. Hvis du f.eks. skriver Java ved hjælp af JDBC, skal du oprette en PreparedStatement og kald derefter passende 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. Installer Innotop for at overvåge MySQL-serverydelsen

  2. konverter enhver datostreng til tidsstempel uden tidszone

  3. Hvordan konverterer man et interval som 1 dag 01:30:00 til 25:30:00?

  4. SQL tutorial for begyndere