sql >> Databáze >  >> RDS >> Oracle

Chyba při vkládání dat obsahujících jednoduché uvozovky

Neměli byste psát kód pro únik řetězce. Skutečnost, že potřebujete uniknout z řetězce, znamená, že děláte něco špatně.

Pokud v INSERT používáte proměnné vazby příkazu, nebude nutné uvádět řetězec, pokud se vyskytne zbloudilá jednoduchá uvozovka. Nebude také nutné zkoušet identifikovat útoky SQL injection v řetězci, což je velký bezpečnostní problém, pokud nepoužíváte vazebné proměnné. A nebudete nutit Oracle, aby analyzoval dotaz pokaždé, když je spuštěn, což je kritické pro výkon systému.

Pokud je procedura, o které mluvíte, napsána v PL/SQL, použije proměnné bind automaticky. Pokud byste uhádli názvy sloupců a předpokládali, že ke generování primárního klíče používáte sekvenci, měli byste něco takového

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;

Jiné front-end jazyky budou mít různé přístupy k použití vazebných proměnných. Pokud například píšete Java pomocí JDBC, vytvořili byste PreparedStatement a poté zavolejte odpovídající setXXX metody, tj.

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. Je možné získat mac adresu pomocí uložené procedury?

  2. Vyhledání, stanovení priority a vyřešení problémů se serverem SQL během několika minut

  3. Agregace podle střední hodnoty v SQL

  4. Aktualizace pomocí `database/sql` v Go je pomalá