Devo usare wpdb prepar prima di wpdb-> insert?
Se sto inserendo valori in una tabella di wordpress usando wpdb-> insert, devo "pulire" i miei dati prima di inserirli o questo metodo (wpdb-> insert) lo fa per me?
Devo usare wpdb prepar prima di wpdb-> insert?
Se sto inserendo valori in una tabella di wordpress usando wpdb-> insert, devo "pulire" i miei dati prima di inserirli o questo metodo (wpdb-> insert) lo fa per me?
Risposte:
No, non dovresti preparare o sfuggire ai dati, questo è fatto per te dalla wpdb
classe.
Dal riferimento alla classe wpdb :
dati :
(array) Dati da inserire (nella colonna => coppie di valori). Sia le colonne $ data che i valori $ data devono essere "non elaborati" (né deve essere eseguito l'escaping di SQL).
Se, tuttavia, stavi scrivendo il tuo SQL anziché utilizzare il insert
metodo, allora sì, dovresti evitare di usarlo prepare
.
Di seguito è riportato un avviso per la classe wpdb.
https://codex.wordpress.org/Class_Reference/wpdb
Un avvertimento
Alcune delle funzioni di questa classe accettano un'istruzione SQL come input. È necessario escludere SQL da tutti i valori non attendibili incorporati nella query SQL per impedire attacchi di iniezione SQL. Controlla la documentazione per vedere se la funzione che prevedi di utilizzare esegue l'escape di SQL per te o si aspetta che sia pre-escape.
Quindi ho letto questo come - la classe wpdb non prepara o scappa automaticamente i dati per te.
Sono abbastanza sicuro che se non puoi fidarti al 100% dell'origine dati nel tuo codice, allora suggerisco di usare la classe di preparazione (?).
Non pensare che l'uso della classe apprendi lo risolverà senza usare correttamente la classe prep. Sono abbastanza nuovo per questo, quindi si prega di inviare eventuali correzioni come risposta se non ho ragione.
$ wpdb-> preparazione ("SELEZIONA * DA tabella DOVE ID =% d AND nome =% s", $ id, $ nome);
Nell'istruzione precedente, ci sono 2 attributi extra. Uno per l'ID e uno per il nome. Per quanto ho letto, ognuno corrisponde in ordine al numero di elementi nella tua query. Inoltre% s = stringa,% d = numero intero e% f = float.
Inoltre, dalla mia lettura, se non metti gli attributi extra, allora in realtà non farà nulla. Ci sarà un avvertimento, ma se lo spegni, forse non lo saprai.
Ecco un esempio dal riferimento di classe stesso in cui aggiungono una classe di preparazione in un INSERT di seguito.
https://codex.wordpress.org/Class_Reference/wpdb#Protect_Queries_Against_SQL_Injection_Attacks
$ wpdb-> query ($ wpdb-> prepar ((INSERT INTO $ wpdb-> postmeta (post_id, meta_key, meta_value) VALUES (% d,% s,% s) ", array (10, $ metakey, $ metavalue) ));
La mia preoccupazione è che la risposta votata non sia corretta secondo la stessa pagina a cui "nessuno" fa riferimento. Presumo che tu usi prepari () ma non altri metodi php standard di escape perché ho preso anche questa risposta come corretta ... fino a quando non ho scavato più a fondo.
Comunque ... forse le cose sono cambiate rispetto alla risposta originale.
$wpdb->insert()
$ wpdb-> update () `oi $wpdb->delete()
dati dovrebbero essere RAW. In una situazione in cui usi eg $wpdb->query()
e passi l'istruzione SQL come input, dovresti evitare dati non attendibili.
No, non è necessario prevenire iniezioni di SQL quando si utilizza: wpdb insert o wpdb delete.
Vedi i seguenti link:
https://codex.wordpress.org/Data_Validation#Database
https://codex.wordpress.org/Class_Reference/wpdb#Protect_Queries_Against_SQL_Injection_Attacks
insert
eupdate
non è necessario. Ma dovrebbe essere usato conquery
.