8
votes

Recherchez plusieurs mots-clés avec PHP et MySQL (où x comme x)

J'ai un code qui recherche de manière dynamique des données dans la base de données à l'aide d'AJAX, mais je ne peux rechercher que 1 mot clé à la fois. Je voudrais le modifier afin que je puisse rechercher plusieurs mots-clés. Maintenant, si je saisis 2 mots-clés séparés par un espace et dans la base de données, les données ne sont pas séparées par un espace, il n'y aura aucun résultat. Si dans la base de données, les données sont:

'PlayStation3' ou 'Play Cool Station3' p> blockQuote>

et je recherche: p>

Station de jeu p> BlockQuote>

Il n'y aurait aucun résultat. Je voudrais savoir si possible de modifier mon code afin que je puisse rechercher 2 ou plusieurs mots-clés ou mots séparés par un espace ou un autre mot ou un point ou un soulignement ou un (-) ou un (+) ou un (+) ou A (%). ou (rien d'autre lol). P>

Je sais que je devrais utiliser PDO ou MySQLI, mais j'utilise ceci pour tester uniquement! P>

$queried = $_POST['query'];



$search = mysql_query("SELECT * FROM links WHERE name LIKE '%$queried%'");
while($searche = mysql_fetch_array($search)){
    echo "".$searche['link']."</br>".$searche['name']."</br>".$searche['size']."</br>".$searche['category']."<hr></br></br>";

    }


0 commentaires

4 Réponses :


0
votes

Il suffit d'ajouter une clause ou une clause

par exemple xxx

mais je fortement vous recommande d'utiliser une requête paramétrée ou une autre bibliothèque sécurisée à éviter Attaques d'injection SQL


1 commentaires

Vous avez raison, merci! Mais je n'ai pas 2 formes, j'ai 1 forme et quand je cherche, ce n'est pas précis. Voici un exemple de ce que je recherche ---> mega-search.me lorsque vous tapez Vous pouvez mettre plus d'un des mots-clés séparés par un espace et la requête trouvera un résultat.



2
votes

n'utilise pas mysql _ * fonctions même pour tester plus. Ils ne sont pas plus faciles que mysqli , juste au cas où vous pensez à tester ici, puis déplacez-vous.

Cependant, vous pouvez diviser votre entrée sur un , et essayez ceci <. / p> xxx


2 commentaires

Merci beaucoup! Ça marche. Je pense que je peux remplacer automatiquement les espaces par% 20, puis obtenir automatiquement les différents mots. Merci! C'est vraiment utile


Heureux ça aide. La fonction ICI élimine automatiquement les espaces supplémentaires du début ou de la fin de vos mots-clés afin que vous ne devez pas remplacer manuellement les espaces.



24
votes

Pour rechercher dynamiquement tous les mots-clés, vous pouvez utiliser la fonction d'explosion pour séparer tous les mots-clés; xxx

note 1: échapper toujours à l'entrée utilisateur avant de l'utiliser dans votre requête.

Note 2: MySQL_ * Les fonctions sont obsolètes, utilisez MySQLI ou PDO comme alternative

Mise à jour 2018 - Note 3: N'oubliez pas de vérifier la longueur de la variable (code> et définir une limite. Sinon, l'utilisateur peut saisir une chaîne variable de variation et un crash de votre base de données.


4 commentaires

Comment cela peut-il être converti en une déclaration préparée? Comptez le nombre d'espaces réservés et ajoutez-les de manière dynamique - mais cela fonctionne?


@Billwhickomb auprès de vous pouvez utiliser Count ($ clés) pour savoir combien de paramètres il y a.


N'oubliez pas de sécuriser votre requête


@Amirhsseinmaste c'est ce que la toute première ligne fait. Voir A plus version robuste ici



2
votes

Ceci est une version forte> MySQL PDO forte> de la réponse de @hanky Panky

 $queried="abc,test, testing";
 $values=explode(',',$queried);
 $sql="SELECT * FROM citations_new WHERE";
 $i=0;
        foreach($values as $v){
            $v=trim($v);
            if($i==0) {
                $sql.=" name LIKE '%$v%'";
            }
           else {
               $sql.=" OR name LIKE '%$v%'";
           }
           $i++;
         }

$sth = $this->db->prepare($sql);
$sth->execute();
$rows = $sth->setFetchMode(PDO::FETCH_ASSOC);

while($row = $sth->fetch()){
    //enter code here   
}


0 commentaires