Jestem nowy w SQL i zastanawiam się, czy muszę użyć wpdb->prepare
poniższego zapytania do utworzonej przeze mnie tabeli
global $wpdb;
$tablename = $wpdb->prefix . "my_custom_table";
$sql = "SELECT * FROM " . $tablename . " ORDER BY date_created DESC";
$resulst = $wpdb->get_results( $sql , ARRAY_A );
Czy muszę prepare
tutaj korzystać ? Jak mam to zrobić?
Twoje zdrowie
plugin-development
mysql
wpdb
Richard Sweeney
źródło
źródło
$tablename = $wpdb->prefix . "my_custom_table"; $concert_id = 1; $sql = "SELECT * FROM " . $tablename . " WHERE concert_id = %d LIMIT 1;"; $prep_sql = $wpdb->prepare( $sql, $concert_id ); $get_concerts = $wpdb->get_results( $prep_sql , ARRAY_A );
I działa świetnie! Nie jestem pewien, dlaczego tak jest. Ale w każdym razie rozumiem to!SELECT * FROM `wp_my_custom_table`
. Można włączyć podwójne wsparcie środki, ale wtedy musiałby wyglądać tak:SELECT * FROM "wp_my_custom_table"
.Podczas korzystania z przygotowania chroni kod przed lukami w zabezpieczeniach SQL injection.
Oto kod, który musisz zmodyfikować, aby używać
prepare()
;źródło
W twoim przypadku nie jest możliwy atak iniekcji SQL . Twój kod nie wymaga dodatkowej ochrony, ponieważ nie korzystaj z danych wejściowych użytkownika, takich jak: wysyłanie, pobieranie, żądanie, cookie.
Nie używaj skomplikowanej funkcji, gdy nie są konieczne do oszczędzania zasobów serwera.
źródło