Voici ma tentative:
$query = $database->prepare('SELECT * FROM table WHERE column LIKE "?%"');
$query->execute(array('value'));
while ($results = $query->fetch())
{
echo $results['column'];
}
Je l'ai compris juste après avoir publié:
$query = $database->prepare('SELECT * FROM table WHERE column LIKE ?');
$query->execute(array('value%'));
while ($results = $query->fetch())
{
echo $results['column'];
}
like
est utilisé? comment le tableau d'exécution doit-il s'exécuter dans l'ordre?Pour ceux qui utilisent des paramètres nommés, voici comment utiliser
LIKE
avec%
une correspondance partielle pour les bases de données MySQL :où se trouve le paramètre nommé
:dangerousstring
.En d'autres termes, utilisez des
%
signes explicitement non échappés dans votre propre requête qui sont séparés et certainement pas l'entrée de l'utilisateur.Edit: La syntaxe de concaténation pour les bases de données Oracle utilise l'opérateur de concaténation:,
||
donc il deviendra simplement:Cependant, il y a des mises en garde comme @bobince mentionne ici que:
C'est donc autre chose à surveiller lors de la combinaison du like et du paramétrage.
la source
LIKE CONCAT('%', :something, '%')
. Référence: stackoverflow.com/a/661207/201648SELECT * FROM calculation WHERE ( email LIKE '%' || luza || '%' OR siteLocation LIKE '%'|| luza ||'%' OR company LIKE '%' ||luza ||'%' )
cela me donnerait une erreur.and it means named placeholders can be used
. Comment est-ce même un problème avec les espaces réservés nommés lorsque vous concaténez en PHP? Évidemment, la concaténation en PHP prend en charge à la fois les noms et les positions et est plus portable car vous pouvez utiliser la même requête pour n'importe quelle base de données. Je ne comprends pas vraiment pourquoi tant de gens pensent qu'il y a une différence entre les espaces réservés nommés et positionnels.la source
bindValue
protège- t-elle contre les attaques par injection? La réponse acceptée annule fondamentalement la valeur de l'utilisation d'?
espaces réservés en concaténant la chaîne de recherche pour qu'elle%
aime dans les jours anciens.Vous pouvez également essayer celui-ci. Je suis confronté à un problème similaire mais j'ai obtenu des résultats après des recherches.
la source
Cela marche:
la source
J'ai eu ça grâce aux délires php
Et cela fonctionne pour moi, très simple. Comme il le dit, vous devez «préparer d'abord notre littéral complet» avant de l'envoyer à la requête
la source
PDO échappe "%" (peut conduire à une injection SQL) : L'utilisation du code précédent donnera les résultats souhaités lorsque vous cherchez à faire correspondre des chaînes partielles MAIS si un visiteur tape le caractère "%", vous obtiendrez toujours des résultats même si vous ne le faites pas ' t avoir quelque chose stocké dans la base de données (cela peut conduire à des injections SQL)
J'ai essayé beaucoup de variantes, toutes avec le même résultat. PDO échappe à "%" des résultats de recherche non désirés / non excités.
Je pensais que cela valait la peine d'être partagé si quelqu'un a trouvé un mot autour de lui, veuillez le partager
la source