recheche dans requete sql

ben4523
Invité n'ayant pas de compte PHPfrance

28 sept. 2013, 12:02

Bonjour,
voila j'ai une chaine de caractère (exemple : serveur1;serveur2;serveur10;serveur20) se sont des noms de serveur qui sont séparer par des points virgules.
Dans une table j'ai tout ses nom avec le host du serveur .... je voudrait qui me trouve tout les host de ses serveur qui sont dans la chaine de caractère.
J'ai déjas ce bout de code mais il fonctionne pas
la chaine est dans $serveur1
$req = mysql_query("SELECT * FROM `serveurs` WHERE `nom` LIKE '%$serveur1%'")or die(mysql_error());
 
 
 while($rows = mysql_fetch_array($req))
	{
	echo $rows['host'];?><br><br><?php
	}
Merci

ViPHP
ViPHP | 3607 Messages

28 sept. 2013, 19:02

Bonjour,

Il y a à priori deux solution à ton problème.
La plus simple serait de faire une recherche exacte mais cela implique que les valeurs des champs corresponde bien, cela donnerais en SQL :
SELECT * FROM `serveurs` WHERE `nom` IN ('serveur1','serveur2','...')
Cela donnerais en php :
<?php
// transformation en tableau
$tab_serveur1 = explode(';',$serveur1);
// protection des données pour mysql
$tab_serveur1_protected = array_map("mysql_real_escape_string",$tab_serveur1);
$req = mysql_query("SELECT * FROM `serveurs` WHERE `nom` in ('".implode("','",$tab_serveur1_protected)."')")or die(mysql_error());
L'autre solution si une recherche approchée est nécessaire c'est de multiplier les LIKE... en sql :
SELECT * FROM `serveurs` WHERE `nom` LIKE 'serveur1' OR LIKE 'serveur2' OR LIKE '...'
En php cela donnerais quelque chose du genre :
<?php
// transformation en tableau
$tab_serveur1 = explode(';',$serveur1);
// protection des données pour mysql
$tab_serveur1_protected = array_map("mysql_real_escape_string",$tab_serveur1);
$req = mysql_query("SELECT * FROM `serveurs` WHERE `nom` in ('".implode("' OR LIKE '",$tab_serveur1_protected)."')")or die(mysql_error());
Cordialement,