Korzystanie jak Oświadczenie $ wpdb-> przygotować pokazując mieszań gdzie znaki wieloznaczne są

głosy
0

Próbuję zbudować przygotowane oświadczenie z symboli wieloznacznych jednak używam do problemu gdzie znaki wieloznaczne procent wydaje się być powrót do tego, co wydaje się być hashe dla symboli wieloznacznych i nie jestem pewien dlaczego. Kod w pytaniu:

$condition = $wpdb->prefix.posts.post_title LIKE %%%s%%;
$query['conditions'][] = $wpdb->prepare($condition, $name);

A wyniki są następujące:

posts.post_title LIKE {d690dd63f5944b9bca120e110c22802f0ec841d8120d813dd4abc08cba4a59c0}BT{d690dd63f5944b9bca120e110c22802f0ec841d8120d813dd4abc08cba4a59c0}

Po prostu zastanawiałem się, czy ktoś ma jakieś pomysły, co może być przyczyną tego. Każda pomoc będzie mile widziana.

Dzięki

Utwórz 18/12/2018 o 11:02
źródło użytkownik
W innych językach...                            


2 odpowiedzi

głosy
0

Wildcard dla lubią musi być w zasięgu co zmienna jest oznaczona %s. W przeciwnym razie to coraz token parametru miesza się z zamiennika SQL. Nawet jeśli to nie był problem, trzeba to zrobić tak i tak, bo w przeciwnym razie nie zostaną% uciekł w struny i będzie koniec z błędem składni SQL.

Innymi słowy trzeba dodać kwantyfikatorów do $namesamej wartości. To powinno załatwić sprawę, myślę:

$condition = $wpdb->prefix."posts.post_title LIKE %s";
$name = '%'.$name.'%';
$query['conditions'][] = $wpdb->prepare($condition, $name);
Odpowiedział 18/12/2018 o 11:07
źródło użytkownik

głosy
0

Nie martw się o skrótów, skąd będą zastąpione% w $ wpdb podczas wykonywania zapytania.

Te skróty zostały wprowadzone z WP v4.8.3 jako poprawka do ataku SQL injection.

Są zastępcze o charakterze%. To uniemożliwiającym pomocą czegoś innego niż% S,% d, i% f. Jeśli istnieje% inne niż zatwierdzone zastosowań, to będzie zastąpić% z hash. Że hash zostaną zastąpione z powrotem do% gdy $ wpdb wykonuje zapytanie.

Jeśli chcesz usunąć mieszań siebie, można użyć remove_placeholder_escape(), tak jak poniżej:

$query['conditions'][] = $wpdb->remove_placeholder_escape($wpdb->prepare($condition, $name));

Odpowiedział 12/09/2019 o 23:29
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more