Sortie de la base de données double
Résolu
l3abyl3oy
Messages postés
5
Date d'inscription
Statut
Membre
Dernière intervention
-
l3abyl3oy Messages postés 5 Date d'inscription Statut Membre Dernière intervention -
l3abyl3oy Messages postés 5 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Depuis quelques jours, j'essaie de faire un système d'autocomplétion pour ma barre de recherche, mais en vain. Pour cette raison je me retourne vers vous expert du web.
Je ne sais pas ce que je fais mal dans le code PHP, mais le voici.
D'après moi ça devrait avoir l'air de ça:
Celui ci fonctionnent mais double les résultats:
Merci pour votre aide et votre temps.
Depuis quelques jours, j'essaie de faire un système d'autocomplétion pour ma barre de recherche, mais en vain. Pour cette raison je me retourne vers vous expert du web.
Je ne sais pas ce que je fais mal dans le code PHP, mais le voici.
D'après moi ça devrait avoir l'air de ça:
<?php
try {$bdd=new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root','');}
catch(Exception $e){die('Erreur : '.$e->getMessage());}
$req = $bdd->prepare('SELECT entreprise FROM entreprises WHERE entreprise LIKE "%:s%" ORDER BY entreprise LIMIT 0,10');
$req->execute(array('s' => $_GET['s']));
$datas = $req->fetchAll();
echo implode('|', $datas);
?>
Celui ci fonctionnent mais double les résultats:
<?php
try {$bdd=new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root','');}
catch(Exception $e){die('Erreur : '.$e->getMessage());}
$req = $bdd->query('SELECT entreprise FROM entreprises ');
while($data = $req->fetch())
{
$dataLen = count($data);
sort($data);
$results = array();
for($i=0 ; $i<$dataLen && count($results)<10 ;$i++ )
{
if(stripos($data[$i], $_GET['s'])===0)
{
array_push($results,$data[$i]);
}
}
echo implode('|', $results);
}
?>
Merci pour votre aide et votre temps.
A voir également:
- Sortie de la base de données double
- Fuite données maif - Guide
- Double ecran - Guide
- Whatsapp double sim - Guide
- Base de registre - Guide
- Supprimer les données de navigation - Guide
3 réponses
Bonjour.
avec les LIKE
tu dois mettre les % dans ton array et non dans le prepare il me semble
avec les LIKE
tu dois mettre les % dans ton array et non dans le prepare il me semble
jordane45
Messages postés
38486
Date d'inscription
Statut
Modérateur
Dernière intervention
4 752
https://stackoverflow.com/questions/11117134/implement-like-query-in-pdo
Bonjour
Par défaut, PDOSattement::fetch te retourne un tableau indexé par les noms des champs ET numériquement, autrement dit tu as deux réponses pour chaque champ.
Il suffit de lui préciser que tu ne veux que l'indice numérique :
Tu n'aurais pas eu ce problème si tu t'étais passé de la boucle for($i=0 ..., parfaitement inutile puisque tu demandes un seul champ ('entreprise') dans ton SELECT
[edit]
En fait, ton second code dont tu dis pourtant qu'il marche en doublant les résultats, me semble complètement illogique.
Alors que ton premier me semble OK après prise en compte de la remarque de jordane.
Par défaut, PDOSattement::fetch te retourne un tableau indexé par les noms des champs ET numériquement, autrement dit tu as deux réponses pour chaque champ.
Il suffit de lui préciser que tu ne veux que l'indice numérique :
while($data = $req->fetch(PDO::FETCH_NUM))
Tu n'aurais pas eu ce problème si tu t'étais passé de la boucle for($i=0 ..., parfaitement inutile puisque tu demandes un seul champ ('entreprise') dans ton SELECT
[edit]
En fait, ton second code dont tu dis pourtant qu'il marche en doublant les résultats, me semble complètement illogique.
Alors que ton premier me semble OK après prise en compte de la remarque de jordane.
Un gros merci pour votre aide, je n'en ai pas reçu beaucoup sur le web. Je sais que ma deuxième initiative n'est pas logique, comme une personne qui essaie d'entrer une forme carrée dans dans un trou triangulaire, mais après toutes mes tentatives pour la première solution rien n'a fonctionné, j'ai modifié la deuxième et ça fonctionne.
Encore une fois merci!
<?php
try {$bdd=new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root','');}
catch(Exception $e){die('Erreur : '.$e->getMessage());}
$req = $bdd->query('SELECT entreprise FROM entreprises ');
$results = array();
while($data = $req->fetch(PDO::FETCH_NUM))
{
$dataLen = count($data);
sort($data);
for($i=0 ; $i<$dataLen && count($results)<10 ;$i++ )
{
if(stripos($data[$i], $_GET['s'])===0)
{
array_push($results,$data[$i]);
}
}
}
echo implode('|', $results);
?>
Encore une fois merci!