Czy muszę używać przygotowania wpdb przed wpdb-> insert?
Jeśli wstawiam wartości do tabeli wordpress za pomocą wpdb-> insert, czy muszę „wyczyścić” moje dane przed wstawieniem go, czy też ta metoda (wpdb-> insert) robi to dla mnie?
Czy muszę używać przygotowania wpdb przed wpdb-> insert?
Jeśli wstawiam wartości do tabeli wordpress za pomocą wpdb-> insert, czy muszę „wyczyścić” moje dane przed wstawieniem go, czy też ta metoda (wpdb-> insert) robi to dla mnie?
Odpowiedzi:
Nie, nie powinieneś przygotowywać ani uciekać z danych, robi to dla ciebie wpdb
klasa.
dane :
(tablica) Dane do wstawienia (w kolumnie => pary wartości). Zarówno kolumny danych $, jak i wartości danych $ powinny być „nieprzetworzone” (żadna z nich nie powinna mieć znaku ucieczki SQL).
Jeśli jednak piszesz własny SQL, a nie przy użyciu tej insert
metody, to tak, powinieneś uciec przed użyciem prepare
.
Poniżej znajduje się ostrzeżenie dla klasy wpdb.
https://codex.wordpress.org/Class_Reference/wpdb
Ostrzeżenie
Niektóre funkcje w tej klasie przyjmują jako dane wejściowe instrukcję SQL. Aby uniknąć ataków polegających na wstrzykiwaniu SQL, SQL musi uciekać od wszystkich niezaufanych wartości, które włączasz do zapytania SQL. Zapoznaj się z dokumentacją, aby sprawdzić, czy funkcja, której zamierzasz użyć, zastępuje SQL dla Ciebie, czy też oczekuje, że zostanie ona wstępnie zablokowana.
Czytam więc to jako - klasa wpdb nie przygotowuje automatycznie ani nie ucieka z danych dla Ciebie.
Jestem pewien, że jeśli nie możesz w 100% zaufać źródłu danych w swoim kodzie, sugeruję użycie klasy przygotowawczej (?).
Nie myśl, że użycie klasy przygotowawczej naprawi ją bez właściwego użycia klasy przygotowawczej. Jestem w tym dość nowy, więc jeśli nie mam racji, proszę opublikować wszelkie poprawki w odpowiedzi.
$ wpdb-> przygotuj ("WYBIERZ * Z tabeli GDZIE ID =% d ORAZ nazwa =% s", $ id, $ nazwa);
W powyższym zestawieniu istnieją 2 dodatkowe atrybuty. Jeden dla identyfikatora i jeden dla imienia i nazwiska. O ile czytam, każdy odpowiada w kolejności liczby elementów w zapytaniu. Również% s = ciąg,% d = liczba całkowita i% f = liczba zmiennoprzecinkowa.
Ponadto, z mojej lektury, jeśli nie wprowadzisz dodatkowych atrybutów, wtedy przygotowanie nic nie zrobi. Pojawi się ostrzeżenie, ale jeśli je wyłączysz, być może nie będziesz wiedział.
Oto przykład z samego odwołania do klasy, w którym dodają klasę przygotowawczą do INSERT poniżej.
https://codex.wordpress.org/Class_Reference/wpdb#Protect_Queries_Against_SQL_Injection_Attacks
$ wpdb-> zapytanie ($ wpdb-> przygotuj („WPROWADŹ DO $ wpdb-> postmeta (post_id, klucz_meta, wartość_meta) WARTOŚCI (% d,% s,% s)”, tablica (10, $ metakey, $ metavalue) ));
Obawiam się, że głosowana odpowiedź jest niepoprawna według tej samej strony, do której odwołuje się „nikt”. Zakładam, że używasz metody prepar (), ale nie innych standardowych metod ucieczki php, ponieważ wziąłem również tę odpowiedź za poprawną ... dopóki nie zagłębiłem się głębiej.
W każdym razie ... może wszystko się zmieniło od czasu pierwotnej odpowiedzi.
$wpdb->insert()
$ wpdb-> update () `lub $wpdb->delete()
dane powinny mieć format RAW. W sytuacji, gdy używasz np. $wpdb->query()
I przekazujesz instrukcję SQL jako dane wejściowe, powinieneś uciec niezaufanym danym.
Nie, nie musisz zapobiegać zastrzykom SQL, gdy używasz - wpdb insert lub wpdb delete.
Zobacz następujące linki:
https://codex.wordpress.org/Data_Validation#Database
https://codex.wordpress.org/Class_Reference/wpdb#Protect_Queries_Against_SQL_Injection_Attacks
insert
iupdate
nie potrzebują tego. Ale należy go używać zquery
.