sql >> Database >  >> RDS >> Oracle

Fout bij het invoegen van gegevens met enkele aanhalingstekens ertussen

Je zou geen code moeten schrijven om aan de string te ontsnappen. Het feit dat je aan de string moet ontsnappen, houdt in dat je iets verkeerd doet.

Als u bindvariabelen gebruikt in uw INSERT statement, is het niet nodig om aan de tekenreeks te ontsnappen als er een verdwaald enkel aanhalingsteken is. Het is ook niet nodig om te proberen SQL-injectie-aanvallen in de tekenreeks te identificeren, wat een enorm beveiligingsprobleem is als u geen bindvariabelen gebruikt. En u dwingt Oracle niet om de query elke keer dat deze wordt uitgevoerd te ontleden, wat essentieel is voor de systeemprestaties.

Als de procedure waar je het over hebt geschreven is in PL/SQL, zal het automatisch bindvariabelen gebruiken. Als je de kolomnamen raadt en ervan uitgaat dat je een reeks gebruikt om je primaire sleutel te genereren, krijg je zoiets als dit

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;

Andere front-endtalen hebben verschillende benaderingen voor het gebruik van bindvariabelen. Als u bijvoorbeeld Java schrijft met JDBC, maakt u een PreparedStatement en bel dan de juiste setXXX methoden, d.w.z.

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. MySql:zoek het rijnummer van een specifiek record

  2. MYSQL selecteer een stuk van een string en bestel op dat stuk

  3. Is het mogelijk om een ​​variabele in MySQL te verlagen?

  4. Postgres-impasses bij gelijktijdige upserts