wpdb->insert: trebuie să folosesc prepare împotriva injecției SQL?
Trebuie să folosesc wpdb prepare înainte de wpdb->insert?
Dacă inserez valori într-un tabel WordPress folosind wpdb->insert, trebuie să "curăț" datele înainte de inserare sau această metodă (wpdb->insert) face asta pentru mine?

Nu, nu trebuie să pregătiți sau să escapați datele, acest lucru este făcut pentru dumneavoastră de clasa wpdb
.
data:
(array) Date de inserat (în perechi coloană => valoare). Atât coloanele $data cât și valorile $data ar trebui să fie "raw" (niciuna nu ar trebui să fie escapată pentru SQL).
Dacă, totuși, ați scrie propriul SQL în loc să folosiți metoda insert
, atunci da, ar trebui să escapați folosind prepare
.

Următorul text reprezintă un avertisment pentru clasa wpdb.
https://codex.wordpress.org/Class_Reference/wpdb
Un avertisment
Unele dintre funcțiile din această clasă primesc o instrucțiune SQL ca intrare. Trebuie să escapați toate valorile nesigure pe care le integrați în interogarea SQL pentru a preveni atacurile de tip SQL injection. Verificați documentația pentru a vedea dacă funcția pe care intenționați să o folosiți escapează automat SQL sau dacă se așteaptă ca datele să fie deja escapanate.
Deci, eu înțeleg asta ca - clasa wpdb nu pregătește sau escapează automat datele pentru tine.
Sunt destul de sigur că dacă nu poți avea încredere 100% în sursa datelor din codul tău, atunci sugerez să folosești clasa prepare(?).
Nu crede că folosirea clasei prepare va rezolva problema fără să o folosești corect. Sunt destul de nou în acest domeniu, așa că te rog să postezi orice corecție ca răspuns dacă nu am dreptate.
$wpdb->prepare( "SELECT * FROM table WHERE ID = %d AND name = %s", $id, $name );
În instrucțiunea de mai sus, există 2 atribute suplimentare. Unul pentru ID și unul pentru nume. Din câte am citit, fiecare corespunde în ordine cu numărul de elemente din interogarea ta. De asemenea, %s = string, %d = întreg și %f = număr zecimal.
Tot din câte am citit, dacă nu adaugi atributele suplimentare, atunci prepare nu va face nimic. Va apărea un avertisment, dar dacă îl dezactivezi, poate nu vei ști.
Iată un exemplu din referința clasei în sine unde se adaugă o clasă prepare într-o instrucțiune INSERT mai jos.
https://codex.wordpress.org/Class_Reference/wpdb#Protect_Queries_Against_SQL_Injection_Attacks
$wpdb->query( $wpdb->prepare( " INSERT INTO $wpdb->postmeta ( post_id, meta_key, meta_value ) VALUES ( %d, %s, %s ) ", array( 10, $metakey, $metavalue ) ) );
Preocuparea mea este că răspunsul cu cele mai multe voturi este incorect conform aceleiași pagini pe care o citează 'nimeni'. Presupun că trebuie să folosești prepare(), dar nu și alte metode standard de escape din PHP, deoarece am considerat și acest răspuns corect... până când am cercetat mai în profunzime.
Oricum... poate lucrurile s-au schimbat de la răspunsul original.

Răspunsul acceptat este corect. Când folosești funcții precum $wpdb->insert()
, $wpdb->update()sau
$wpdb->delete()datele ar trebui să fie RAW. Într-o situație în care folosești de exemplu
$wpdb->query()` și transmiți o declarație SQL ca input, ar trebui să escape datele nesigure.

nmr, cred că am înțeles acum. Deci pentru a clarifica... pentru liniștea mea... ce ai folosit ca exemplu este 'metoda insert' și 'metoda delete' în opoziție cu exemplele pe care le-am folosit eu folosind 'metoda query' ... (%wpdb->query). Șterg răspunsul meu? Sau îl las?

Nu, nu este nevoie să te protejezi împotriva injecțiilor SQL atunci când folosești funcțiile wpdb insert sau wpdb delete.
Consultă următoarele linkuri:
https://codex.wordpress.org/Data_Validation#Database
https://codex.wordpress.org/Class_Reference/wpdb#Protect_Queries_Against_SQL_Injection_Attacks
