web-dev-qa-db-fra.com

Comment utiliser la chaîne PHP dans la requête mySQL LIKE?

J'essaie de trouver le nombre de lignes qui correspondent à un modèle spécifique. Dans cet exemple, tout ce qui commence par "123":

Cela fonctionne:

$query = mysql_query("SELECT * FROM table WHERE the_number LIKE '123%'");
$count = mysql_num_rows($query);

Le problème est que le LIKE variera, donc j'essaie de le définir dans le script, puis d'exécuter la requête, mais cela ne fonctionne PAS:

$prefix = "123";
$query = mysql_query("SELECT * FROM table WHERE the_number LIKE $prefix.'%'");
$count = mysql_num_rows($query);

Comment puis-je obtenir que cette requête fonctionne correctement dans le deuxième exemple?

EDIT: Je l'ai également essayé sans la période (ne fonctionne pas non plus):

$query = mysql_query("SELECT * FROM table WHERE the_number LIKE $prefix'%'");
11
JROB

Vous avez une mauvaise syntaxe; il n'est pas nécessaire de placer un point à l'intérieur d'une chaîne entre guillemets doubles. Au lieu de cela, cela devrait plutôt ressembler à

$query = mysql_query("SELECT * FROM table WHERE the_number LIKE '$prefix%'");

Vous pouvez le confirmer en imprimant la chaîne pour voir qu'elle s'avère identique au premier cas.

Bien sûr, c'est pas une bonne idée pour simplement injecter des variables dans la chaîne de requête comme celle-ci en raison du danger d'injection SQL. Vous devriez au moins échapper manuellement le contenu de la variable avec mysql_real_escape_string, ce qui pourrait le faire ressembler à ceci:

$sql = sprintf("SELECT * FROM table WHERE the_number LIKE '%s%%'",
               mysql_real_escape_string($prefix));
$query = mysql_query($sql);

Notez que dans le premier argument de sprintf, le signe de pourcentage doit être doublé pour finir par apparaître une fois dans le résultat.

18
Jon

FAITES comme

$query = mysql_query("SELECT * FROM table WHERE the_number LIKE '$yourPHPVAR%'");

N'oubliez pas le % à la fin

3
Starx