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 posté:
$query = $database->prepare('SELECT * FROM table WHERE column LIKE ?');
$query->execute(array('value%'));
while ($results = $query->fetch())
{
echo $results['column'];
}
Pour utiliser Like avec% partial matching, vous pouvez également procéder de la manière suivante: column like concat('%', :dangerousstring, '%')
avec le paramètre nommé :dangerousstring
. En d’autres termes, vous devez utiliser des signes% explicitement non échappés dans votre propre requête, qui sont séparés et qui ne correspondent certainement pas à la saisie de l’utilisateur.
Edit: Une syntaxe alternative de concaténation que j'ai trouvée consiste à utiliser l'opérateur de concaténation: ||, de sorte qu'il deviendra simplement: where column like '%' || :dangerousstring || '%' etc
@bobince mentionne ici que:
La difficulté vient quand vous voulez autoriser un _ littéral
%
ou_
caractère dans la chaîne de recherche, sans que cela agisse comme un caractère générique.
C'est donc quelque chose d'autre à surveiller lors de la combinaison du type et du paramétrage.
$query = $database->prepare('SELECT * FROM table WHERE column LIKE ?');
$query->bindValue(1, "%$value%", PDO::PARAM_STR);
$query->execute();
if (!$query->rowCount() == 0)
{
while ($results = $query->fetch())
{
echo $results['column'] . "<br />\n";
}
}
else
{
echo 'Nothing found';
}
Vous pouvez aussi essayer celui-ci. Je fais face à un problème similaire, mais j'ai obtenu des résultats après des recherches.
$query = $pdo_connection->prepare('SELECT * FROM table WHERE column LIKE :search');
$stmt= $pdo_connection->prepare($query);
$stmt->execute(array(':search' => '%'.$search_term.'%'));
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
print_r($result);
Cela marche:
search `table` where `column` like concat('%', :column, '%')
Je l'ai eu de délires php
$search = "%$search%";
$stmt = $pdo->prepare("SELECT * FROM table WHERE name LIKE ?");
$stmt->execute([$search]);
$data = $stmt->fetchAll();
Et cela fonctionne pour moi, très simple. Comme il le dit, vous devez "préparer notre littéral complet en premier" avant de l'envoyer à la requête
AOP échappe à "%" (peut entraîner une injection sql): L'utilisation du code précédent donnera les résultats souhaités pour rechercher des chaînes partielles MAIS Si un visiteur tape le caractère "%", vous obtiendrez toujours des résultats même si rien n'est stocké dans la base de données (cela peut entraîner des injections SQL)
J'ai essayé beaucoup de variations, toutes avec le même résultat. PDO échappe à "%" menant aux résultats de recherche non désirés/non excités.
Je pensais que ça valait la peine de partager si quelqu'un a trouvé un mot autour de lui, merci de le partager
Si vous voulez le faire avec php et non dans la requête
$string = 'this is a string';
$len = strlen($string);
$first = substr_replace($string, '%', 0,0); // insert % before the first character
$string = substr_replace($first, '%', $len+1,0); // insert % after the last one
Le $string
aura la valeur '%this is a string%'
J'en ai fait une fonction et je l'ai utilisée pour mes déclarations similaires