Convertir moteur recherche mysql_ en PDO
Résolu
13stephweb13
Messages postés
48
Date d'inscription
Statut
Membre
Dernière intervention
-
13stephweb13 Messages postés 48 Date d'inscription Statut Membre Dernière intervention -
13stephweb13 Messages postés 48 Date d'inscription Statut Membre Dernière intervention -
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):
Pour le faire en PDO j'ai donc essayé de remplacer ces lignes de code:
Par:
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.
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):
if(!empty($_GET['q'])) { if(preg_match("#^[^<>=]{3,100}$#",$_GET['q'])) { $get_q = addslashes($_GET['q']); $s = explode(" ",$get_q); mysql_connect("localhost","root",""); mysql_select_db("cms"); $sql = "SELECT * FROM articles"; $i = 0; foreach($s as $mot) { if(strlen($mot)>0) { if($i==0) { $sql.=" WHERE "; } else { $sql.=" OR "; } $sql.="titre_h1 LIKE '%$mot%'"; $i++; } } $req=mysql_query($sql) or die (mysql_error()); echo mysql_num_rows($req)." Résultat<br />"; while($d = mysql_fetch_assoc($req)) { ...
Pour le faire en PDO j'ai donc essayé de remplacer ces lignes de code:
mysql_connect("localhost","root","");
mysql_select_db("cms");
$sql = "SELECT * FROM articles";
Par:
$bdd = new PDO('mysql:host=localhost;dbname=cms', 'root', '');
$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.
A voir également:
- Convertir moteur recherche mysql_ en PDO
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Google moteur de recherche page d'accueil - Guide
- Convertir epub en kindle - Guide
- Convertir youtube en mp3 avec audacity - Guide
3 réponses
Bonjour,
et qu'as tu comme code à la ligne 46 de ton fichier C:\wamp\www\CMS\admin-az\rechercher.php ?
Dans l'idéal, il faudrait nous le montrer entièrement.
PS: Merci de préciser le "langage" dans les balises de code pour la coloration syntaxique.
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
et qu'as tu comme code à la ligne 46 de ton fichier C:\wamp\www\CMS\admin-az\rechercher.php ?
Dans l'idéal, il faudrait nous le montrer entièrement.
PS: Merci de préciser le "langage" dans les balises de code pour la coloration syntaxique.
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
ok merci
à la ligne 46 (wamp a du aussi prendre en compte le code html que j'ai au dessus, donc):
et mon script complet (qui marche, mais je veut le convertir en PDO)
Merci beaucoup
à la ligne 46 (wamp a du aussi prendre en compte le code html que j'ai au dessus, donc):
$sql.=" WHERE ";
et mon script complet (qui marche, mais je veut le convertir en PDO)
<?php if(!empty($_GET['q'])) { if(preg_match("#^[^<>=]{3,100}$#",$_GET['q'])) { $get_q = addslashes($_GET['q']); $s = explode(" ",$get_q); mysql_connect("localhost","root",""); mysql_select_db("cms"); $sql = "SELECT * FROM articles"; $i = 0; foreach($s as $mot) { if(strlen($mot)>0) { if($i==0) { $sql.=" WHERE "; } else { $sql.=" OR "; } $sql.="titre_h1 LIKE '%$mot%'"; $i++; } } $req=mysql_query($sql) or die (mysql_error()); echo mysql_num_rows($req)." Résultat<br />"; while($d = mysql_fetch_assoc($req)) { $c2 = $d["id"]; $i = 0; foreach($s as $mot) { if(strlen($mot)>3) { $i++; if($i > 4) {$i = 1;} $c2 = str_ireplace($mot, '<span class="surlign'.$i.'">'.$mot.'</span>', $c2); } } echo '<h1>'.$c2.'</h1>'; $c = $d["description"]; $i = 0; foreach($s as $mot) { if(strlen($mot)>3) { $i++; if($i > 4) {$i = 1;} $c = str_ireplace($mot, '<span class="surlign'.$i.'">'.$mot.'</span>', $c); } } echo '<p>'.$c.'</p>'; } } else { $erreur_search = 'Erreur dans la recherche.'; } } ?>
Merci beaucoup
ok
Et quand je tente de lancer une recherche (en tapant des mots clés dans le champ input) ç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
Et la ligne 46 est elle:
Merci beaucoup
<?php if(!empty($_GET['q'])) { if(preg_match("#^[^<>=]{3,100}$#",$_GET['q'])) { $get_q = addslashes($_GET['q']); $s = explode(" ",$get_q); $bdd = new PDO('mysql:host=localhost;dbname=cms', 'root', ''); $sql = $bdd->query("SELECT * FROM articles"); $i = 0; foreach($s as $mot) { if(strlen($mot)>0) { if($i==0) { $sql.=" WHERE "; } else { $sql.=" OR "; } $sql.="titre_h1 LIKE '%$mot%'"; $i++; } } $req=mysql_query($sql) or die (mysql_error()); echo mysql_num_rows($req)." Résultat<br />"; while($d = mysql_fetch_assoc($req)) { $c2 = $d["id"]; $i = 0; foreach($s as $mot) { if(strlen($mot)>3) { $i++; if($i > 4) {$i = 1;} $c2 = str_ireplace($mot, '<span class="surlign'.$i.'">'.$mot.'</span>', $c2); } } echo '<h1>'.$c2.'</h1>'; $c = $d["description"]; $i = 0; foreach($s as $mot) { if(strlen($mot)>3) { $i++; if($i > 4) {$i = 1;} $c = str_ireplace($mot, '<span class="surlign'.$i.'">'.$mot.'</span>', $c); } } echo '<p>'.$c.'</p>'; } } else { $erreur_search = 'Erreur dans la recherche.'; } } ?>
Et quand je tente de lancer une recherche (en tapant des mots clés dans le champ input) ç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
Et la ligne 46 est elle:
$sql.=" WHERE ";
Merci beaucoup
Le souci vient du fait que tu utilises ta variable $sql à cette ligne
ce qui genère un jeu d'enregistrement..
puis tu essayes de lui ajouter du texte.... d'où le message d'erreur...
A la limite il faut faire :
... puis plus bas (ligne 26 de ton code )
par contre.. il te faudra également modifier tes lignes 27/28 pour utiliser mysqli au lieu de mysql.
$sql = $bdd->query("SELECT * FROM articles");
ce qui genère un jeu d'enregistrement..
puis tu essayes de lui ajouter du texte.... d'où le message d'erreur...
A la limite il faut faire :
$bdd = new PDO('mysql:host=localhost;dbname=cms', 'root', ''); $sql = "SELECT * FROM articles";
... puis plus bas (ligne 26 de ton code )
$req = $bdd->query($sql);
par contre.. il te faudra également modifier tes lignes 27/28 pour utiliser mysqli au lieu de mysql.
OK, c'est bon j'ai fait ce que tu m'as dit.
ps: Par contre je pensais que c'était pas bon de mettre
je pensais qu'il faillais toujours faire des requêtes préparés en pdo.
Mais ça l'air de bien fonctionner.
et j'ai aussi modifier mes lignes 27/28 en y faisant en PDO.
Merci beaucoup,
ps: Par contre je pensais que c'était pas bon de mettre
$sql = "SELECT * FROM articles";
je pensais qu'il faillais toujours faire des requêtes préparés en pdo.
Mais ça l'air de bien fonctionner.
et j'ai aussi modifier mes lignes 27/28 en y faisant en PDO.
Merci beaucoup,
je pensais qu'il faillais toujours faire des requêtes préparés en pdo.
Mais ça l'air de bien fonctionner.
Les requêtes préparées sont essentiellement utilisées lorsque tu as des paramètres à ta requête (un WHERE....)
Sinon.. pas besoin.