Atâta timp cât valorile introduse de la utilizatori nu sunt concatenate direct în șirul utilizat pentru instrucțiunea SQL, nu ar trebui să existe niciun risc de securitate.
Codul afișat în întrebare este sigur deoarece folosește metodele care se ocupă de manipularea valorilor introduse de utilizatori pentru a evita orice posibilă problemă.
Următorul cod este un exemplu de ceea ce trebuie evitat.
$db = \Drupal::service('baza de date');
$db->query("SELECT * FROM {users} WHERE nume = '" . $form_state->getValue('nume') . "'");
Dacă valoarea introdusă pentru Nume au fost ' SAU '1'='1' --
, interogarea executată va deveni următoarea. (--
este începutul comentariului.)
SELECTAȚI * FROM {users} WHERE nume = '' SAU '1'='1' --
Dacă sunt permise mai multe instrucțiuni, valoarea introdusă de la utilizator ar putea, de asemenea, să șteargă, de exemplu, un tabel al bazei de date, ceea ce ar putea fi posibil prin introducerea A'; DROP TABLE {utilizatori}; --
. În acest caz, interogarea executată va deveni următoarea. (Comentariul de la sfârșit este doar pentru a lăsa motorul bazei de date să ignore restul interogării.)
SELECT * FROM {users} WHERE nume = 'a'; DROP TABLE {utilizatori}; --
Valorile introduse de utilizatori trebuie să fie igienizate corespunzător atunci când sunt afișate într-o pagină. Ele nu ar trebui să fie igienizate pentru asta atunci când sunt salvate în baza de date.