Hier ist mein Versuch:
$query = $database->prepare('SELECT * FROM table WHERE column LIKE "?%"');
$query->execute(array('value'));
while ($results = $query->fetch())
{
echo $results['column'];
}
Ich habe es gleich nach dem Posten herausgefunden:
$query = $database->prepare('SELECT * FROM table WHERE column LIKE ?');
$query->execute(array('value%'));
while ($results = $query->fetch())
{
echo $results['column'];
}
like
verwendet werden? Wie soll das Execute-Array der Reihe nach ausgeführt werden?Für diejenigen , benannte Parameter verwenden, ist hier, wie die Verwendung
LIKE
mit%
Teilübereinstimmung für MySQL - Datenbanken :wo der genannte Parameter ist
:dangerousstring
.Mit anderen Worten, verwenden Sie
%
in Ihrer eigenen Abfrage explizit nicht entkoppelte Zeichen, die getrennt sind und definitiv nicht die Benutzereingabe sind.Bearbeiten: Die Verkettungssyntax für Oracle-Datenbanken verwendet den Verkettungsoperator :
||
, wird also einfach:Es gibt jedoch Vorbehalte, da @bobince hier erwähnt , dass:
Das ist also etwas anderes, auf das Sie achten müssen, wenn Sie Like und Parametrisierung kombinieren.
quelle
LIKE CONCAT('%', :something, '%')
. Referenz: stackoverflow.com/a/661207/201648SELECT * FROM calculation WHERE ( email LIKE '%' || luza || '%' OR siteLocation LIKE '%'|| luza ||'%' OR company LIKE '%' ||luza ||'%' )
dies würde mir einen Fehler geben.and it means named placeholders can be used
. Wie ist es überhaupt ein Problem mit benannten Platzhaltern, wenn Sie in PHP verketten? Offensichtlich unterstützt die Verkettung in PHP sowohl Named als auch Positional und ist portabler, da Sie für jede Datenbank dieselbe Abfrage verwenden können. Ich verstehe nicht wirklich, warum so viele Leute denken, dass es einen Unterschied zwischen benannten und positionellen Platzhaltern gibt.quelle
bindValue
vor Injektionsangriffen? Die akzeptierte Antwort negiert im Grunde den Wert der Verwendung von?
Platzhaltern, indem die Suchzeichenfolge so verkettet wird,%
dass sie in den alten Tagen gefällt.Sie können diesen auch ausprobieren. Ich stehe vor einem ähnlichen Problem, habe aber nach Recherchen ein Ergebnis erzielt.
quelle
Das funktioniert:
quelle
Ich habe das von PHP-Wahnvorstellungen bekommen
Und es funktioniert bei mir sehr einfach. Wie er sagt, müssen Sie "zuerst unser vollständiges Literal vorbereiten", bevor Sie es an die Abfrage senden
quelle
PDO entgeht "%" (kann zu SQL-Injection führen) : Die Verwendung des vorherigen Codes führt zu den gewünschten Ergebnissen, wenn Teilzeichenfolgen abgeglichen werden sollen. ABER wenn ein Besucher das Zeichen "%" eingibt, erhalten Sie auch dann Ergebnisse, wenn Sie dies nicht tun. Sie haben nichts in der Datenbank gespeichert (dies kann zu SQL-Injektionen führen).
Ich habe viele Variationen ausprobiert, alle mit dem gleichen Ergebnis. PDO entgeht "%" und führt zu unerwünschten / nicht aufgeregten Suchergebnissen.
Ich dachte, es lohnt sich zu teilen, wenn jemand ein Wort darüber gefunden hat, teilen Sie es bitte
quelle