Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1480 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Convertir moteur recherche mysql_ en PDO

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Convertir moteur recherche mysql_ en PDO

n°2252124
13stephweb​13
Posté le 02-03-2015 à 18:18:15  profilanswer
 

Bonjour,
je débute en php, et pour apprendre ce matin j'ai voulu faire un moteur de recherche interne à l'ide d'un tuto vidéo. Mais il est fait avec les vieilles fonctions mysql_ alors que je veux le faire en PDO.
J'ai donc essayé, mais quand je le fait en PDO ça me met une erreur et ça ne fonctionne pas.
 
Voici le début de mon code (avec les fonctions mysql_ que je ne veux pas):

Code :
  1. if(!empty($_GET['q'])) {
  2. if(preg_match("#^[^<>=]{3,100}$#",$_GET['q'])) {
  3.  $get_q = addslashes($_GET['q']);
  4.  $s = explode(" ",$get_q);
  5.  mysql_connect("localhost","root","" );
  6.  mysql_select_db("cms" );
  7.  $sql = "SELECT * FROM articles";
  8.  $i = 0;
  9.  foreach($s as $mot) {
  10.   if(strlen($mot)>0) {
  11.    if($i==0) {
  12.     $sql.=" WHERE ";
  13.    }
  14.    else {
  15.     $sql.=" OR ";
  16.    }
  17.    $sql.="titre_h1 LIKE '%$mot%'";
  18.    $i++;
  19.   }
  20.  }
  21.  $req=mysql_query($sql) or die (mysql_error());
  22.  echo mysql_num_rows($req)." Résultat<br />";
  23.  while($d = mysql_fetch_assoc($req)) {
  24.  ...


Pour le faire en PDO j'ai donc essayé de remplacer ces lignes de code:

Code :
  1. mysql_connect("localhost","root","" );
  2. mysql_select_db("cms" );
  3. $sql = "SELECT * FROM articles";


Par:

Code :
  1. $bdd = new PDO('mysql:host=localhost;dbname=cms', 'root', '');
  2. $sql = $bdd->query("SELECT * FROM articles" );


Et ça me met ceci comme erreur:
 Catchable fatal error: Object of class PDOStatement could not be converted to string in C:\wamp\www\CMS\admin-az\rechercher.php on line 46
 
Si quelqu'un peut m'aider à le faire en PDO?
Merci beaucoup.

mood
Publicité
Posté le 02-03-2015 à 18:18:15  profilanswer
 

n°2252129
scvo0ne
Posté le 02-03-2015 à 20:03:46  profilanswer
 

Faudrai ptet qu'on voit la ligne 46

n°2252130
13stephweb​13
Posté le 02-03-2015 à 20:44:27  profilanswer
 

la ligne 46 de ma  page, est elle:

Code :
  1. $sql.=" WHERE ";


 
Merci beaucoup

n°2252132
The_Grim
Posté le 02-03-2015 à 21:15:42  profilanswer
 

Pourquoi un point après $sql? Si tu essayes de faire une assignation dans une variable, je crois que ton nom de variable est incorrect (seulement les caractères alphanumériques et underscore sont valides il me semble)

n°2252133
13stephweb​13
Posté le 02-03-2015 à 21:25:38  profilanswer
 

si je met $sql .= " WHERE ";
c'est pour continuer derrière $sql = "SELECT * FROM articles";
si seulement 1 mot clé est tapé le input recherche..
Et $sql.=" OR ", pour si + de 1 mot clé est tapé dans le input recherche.
 
En fait le code il marchais avec les fonction mysql_. Mais je veux le faire en PDO, et avec le code si dessous,
cette erreur s'affiche lorsque je tente une recherche dans le input, :
 Catchable fatal error: Object of class PDOStatement could not be converted to string in C:\wamp\www\CMS\admin-az\rechercher.php on line 46
 

Code :
  1. <?php
  2. if(!empty($_GET['q'])) {
  3. if(preg_match("#^[^<>=]{3,100}$#",$_GET['q'])) {
  4.  $get_q = addslashes($_GET['q']);  // récupere recherche
  5.  $s = explode(" ",$get_q);    // permet d'exploser une chaine, et de socker résultat dans un tableaux
  6.  $bdd = new PDO('mysql:host=localhost;dbname=cms', 'root', '');    // tentative de connexion en PDO
  7.  $sql = $bdd->query("SELECT * FROM articles" );
  8.  $i = 0;
  9.  foreach($s as $mot) {    // pour parcouri tableaux, pour récuperer chaque mots
  10.   if(strlen($mot)>0) {   // si + de 0 lettre dans mot
  11.    if($i==0) {
  12.     $sql .= " WHERE ";
  13.    }
  14.    else {
  15.     $sql .= " OR ";
  16.    }
  17.    $sql .= "titre_h1 LIKE '%$mot%'";  // mettre en forme la recherche. %: mettre n'importe quoi avant et après
  18.    $i++;
  19.   }
  20.  }
  21.  //echo $sql."<br />";
  22.  $req=mysql_query($sql) or die (mysql_error());
  23.  echo mysql_num_rows($req)." Résultat<br />";
  24.  while($d = mysql_fetch_assoc($req)) {
  25.   $c2 = $d["id"];
  26.   $i = 0;
  27.   foreach($s as $mot) {    // parcourir l'ensemble des mos clés dans titre_h1, pour leur donner un style
  28.    if(strlen($mot)>3) {
  29.     $i++;
  30.     if($i > 4) {$i = 1;}
  31.     $c2 = str_ireplace($mot, '<span class="surlign'.$i.'">'.$mot.'</span>', $c2);  // str_ireplace: remplacement insensible à la casse
  32.    }
  33.   }
  34.   echo '<h1>'.$c2.'</h1>';
  35.   $c = $d["description"];
  36.   $i = 0;
  37.   foreach($s as $mot) {  // parcourir l'ensemble des mos clés dans description, pour leur donner un style
  38.    if(strlen($mot)>3) {
  39.     $i++;
  40.     if($i > 4) {$i = 1;}
  41.     $c = str_ireplace($mot, '<span class="surlign'.$i.'">'.$mot.'</span>', $c);
  42.    }
  43.   }
  44.   echo '<p>'.$c.'</p>';
  45.  }
  46. }
  47. else {
  48.  $erreur_search = 'Erreur dans la recherche.';
  49. }
  50. }
  51. ?>


 
merci

n°2252135
scvo0ne
Posté le 02-03-2015 à 21:40:59  profilanswer
 

Je vais te dire ce que j'ai répété pendant 6 semaines à mon stagiaire : " faut lire les messages d'erreur "
 
"Object of class PDOStatement could not be converted to string"
 

Code :
  1. $sql = $bdd->query("SELECT * FROM articles" );


Tu executes la requête et le résultat $sql est un objet de la classe PDOStatement
 

Code :
  1. $sql.=" WHERE ";


Là tu fait comme si $sql est une chaine de caractère qui représente la requête
 
En lisant ton code tu executes la requete à la ligne 10 et seulement après tu la modifies pour prendre en compte la recherche.
 
La ligne 10  $bdd->query devrait plutot etre à la ligne 27 et à mon avis tu devrais utilier des noms de variables plus explicites que $sql, par ex. $requete_sql et $resultat
 
edit : y a d'autres bricoles aussi, par ex. remplace ton  addslashes par une requete préparée


Message édité par scvo0ne le 02-03-2015 à 21:48:36
n°2252140
13stephweb​13
Posté le 02-03-2015 à 23:26:23  profilanswer
 

_Je vais te dire ce que j'ai répété pendant 6 semaines à mon stagiaire : " faut lire les messages d'erreur "  
 
_Je les ai lit, je les ai même traduit avec Google traduction...
 
Mais ça fait seulement 10 jours que j'ai commencé mon apprentissage sur les requêtes SQL...
Donc même en lisant les messages d'erreur des fois je suis pommé.
 
Mais je suis arrivé à le faire fonctionné.
 
Merci beaucoup pour vos aides


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Convertir moteur recherche mysql_ en PDO

 

Sujets relatifs
Recherche d'un mot dans un fichier[Powershell] Recherche fichier à partir d'un csv
Recherche d'un caractère dans un texteRecherche dans txt
Barre de recherche wikipédiaImportation cvs dans mysql
[RESOLU][PHP][MYSQL]requête Mysql (INSERT)Ignorer espaces dans une recherche VBA
Mysql exclure double critère[Mysql] Pertinence des résultats avec MATCH / AGAINST
Plus de sujets relatifs à : Convertir moteur recherche mysql_ en PDO


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR