J'ai essayé de comprendre comment je peux faire une requête avec MySQL qui vérifie si la valeur (chaîne $haystack
) dans une certaine colonne contient certaines données (chaîne $needle
), comme ceci:
mysql_query("
SELECT *
FROM `table`
WHERE `column`.contains('{$needle}')
");
En PHP, la fonction est appelée substr($haystack, $needle)
, alors peut-être:
WHERE substr(`column`, '{$needle}')=1
column LIKE '...'
elle est insensible à la casse, aveccolumn LIKE BINARY '...'
elle est sensible à la casseLIKE
soit proposé de vérifier toute sous-chaîne car cet opérateur utilise deux caractères génériques:%
et_
. Cela signifie que si votre chaîne $ needle contient l'un de ces caractères spéciaux, le résultat n'est pas du tout attendu. (-1) pour cette réponse et (+1) pour la réponse INSTR.Utilisation:
Référence:
la source
LIKE %...%
n'utilisera pas d'index s'il en existe un, ils devraient donc être équivalents;LIKE ...%
utiliserait un index s'il était présent. Si les performances sont un réel problème, la recherche en texte intégral (FTS) serait une meilleure approche.like
opérateur. Avecinstr
une phrase peut être commandée comme ceciselect * from table order by instr(col1,"mystring")
la source
Le mien utilise
LOCATE
dans mysql:Cette fonction est sûre sur plusieurs octets et ne respecte la casse que si au moins un argument est une chaîne binaire.
Dans ton cas:
la source
En plus de la réponse de @WoLpH.
Lorsque vous utilisez le
LIKE
mot - clé, vous avez également la possibilité de limiter la direction dans laquelle la chaîne correspond. Par exemple:Si vous cherchiez une chaîne commençant par votre
$needle
:Si vous cherchiez une chaîne qui se termine par
$needle
:la source
sachez que cela est dangereux:
faire en premier:
il empêchera ainsi d'éventuelles attaques.
la source
mysql_real_escape_string
va être obsolète dans les futures versions de PHP.$stmt = $dbh->prepare("Where 'column' LIKE '{:needle}'"); $stmt->bindParam(':needle', $needle); $stmt->execute();
Vous recherchez probablement une
find_in_set
fonction:Cette fonction agit comme une
in_array
fonction en PHPla source