Oto moja próba:
$query = $database->prepare('SELECT * FROM table WHERE column LIKE "?%"');
$query->execute(array('value'));
while ($results = $query->fetch())
{
echo $results['column'];
}
Zrozumiałem to zaraz po tym, jak opublikowałem:
$query = $database->prepare('SELECT * FROM table WHERE column LIKE ?');
$query->execute(array('value%'));
while ($results = $query->fetch())
{
echo $results['column'];
}
like
użyto wielu ? w jaki sposób tablica execute powinna być wykonywana w kolejności?Dla tych, którzy używają nazwanych parametrów, oto jak używać
LIKE
z%
częściowym dopasowaniem dla baz danych MySQL :gdzie nazwany parametr jest
:dangerousstring
.Innymi słowy,
%
we własnym zapytaniu używaj jawnie znaków bez zmiany znaczenia, które są oddzielone i na pewno nie są danymi wejściowymi użytkownika.Edycja: składnia konkatenacji dla baz danych Oracle używa operatora konkatenacji:,
||
więc po prostu stanie się:Istnieją jednak zastrzeżenia, ponieważ @bobince wspomina tutaj, że:
Jest to więc coś, na co należy uważać podczas łączenia polubień i parametryzacji.
źródło
LIKE CONCAT('%', :something, '%')
. Źródła: stackoverflow.com/a/661207/201648SELECT * FROM calculation WHERE ( email LIKE '%' || luza || '%' OR siteLocation LIKE '%'|| luza ||'%' OR company LIKE '%' ||luza ||'%' )
co dałoby mi błąd.and it means named placeholders can be used
. Jak to jest w ogóle problem z nazwanymi symbolami zastępczymi podczas konkatenacji w PHP? Oczywiście konkatenacja w PHP obsługuje zarówno nazwane, jak i pozycyjne i jest bardziej przenośna, ponieważ możesz użyć tego samego zapytania dla dowolnej bazy danych. I naprawdę nie rozumiem, dlaczego tak wielu ludzi, że istnieje jakikolwiek różnica między nazwanych i pozycyjnych zastępcze.źródło
bindValue
chroni przed atakami iniekcyjnymi? Zaakceptowana odpowiedź w zasadzie neguje wartość używania?
symboli zastępczych, łącząc ciąg wyszukiwania%
z polubieniem w dawnych dniach.Możesz także spróbować tego. Mam podobny problem, ale po badaniach uzyskałem wynik.
źródło
To działa:
źródło
Mam to z urojeń php
U mnie to działa, bardzo proste. Jak mówi, przed wysłaniem go do zapytania należy najpierw „przygotować nasz kompletny dosłowny”
źródło
PDO ucieka „%” (może prowadzić do wstrzyknięcia sql) : Użycie poprzedniego kodu da pożądane rezultaty, gdy szuka się dopasowania częściowych ciągów, ALE jeśli odwiedzający wpisze znak „%”, nadal otrzymasz wyniki, nawet jeśli tego nie zrobisz nie mam nic zapisanego w bazie danych (może to prowadzić do wstrzyknięć sql)
Wypróbowałem wiele wariacji, wszystkie z tym samym rezultatem PDO ucieka przed „%” wiodącymi niechcianymi / niespodziewanymi wynikami wyszukiwania.
Pomyślałam, że warto się tym podzielić, jeśli ktoś znalazł przy nim jakieś słowo, proszę o podzielenie się nim
źródło