Extension PDO

Résolu/Fermé
troubadour2 Messages postés 277 Date d'inscription vendredi 11 juin 2010 Statut Membre Dernière intervention 19 juin 2016 - 16 juil. 2011 à 19:03
troubadour2 Messages postés 277 Date d'inscription vendredi 11 juin 2010 Statut Membre Dernière intervention 19 juin 2016 - 1 août 2011 à 14:18
Bonjour,

Je souhaite commencer à développer en PDO car soi-disant elle assure au développeur un confort d'utilisation et des performances inégalée.
Pour apprendre je veux commencer par refaire une fonction classique en PDO. j'ai déjà lu et épluché pas mal de tutos mais comme ça je verrai du concret.
Pouvez-vous me donner quelques explications sur ma fonction pour la passer en PDO s'ils vous plait, ça serai très sympa.
Je vous remercie beaucoup.
<?php
function affiche_menu($idpage) {
	// Sélectionne toutes les pages filles de la page en cours
	$sql = 'SELECT 'Id_page', 'Titre' FROM 'menu' WHERE 'Id_parent' = '.$idpage;
	$resultat = requete_SQL($sql);
	// Si la page n'a pas de page fille, alors on modifie la requète pour obtenir ses pages soeurs.
	if (mysql_num_rows($resultat) == 0) {
		$sql = 'SELECT 'Id_page', 'Titre' FROM 'menu' WHERE 'Id_parent' = '.$_ENV['id_parent'];
		$resultat = requete_SQL($sql);
	}
	$menu_retour = '<ul>';
	while ($tabl_result = mysql_fetch_array($resultat)) {
		$menu_retour .= '<li>';
		$menu_retour .= '<a href="index.php?id_page='.$tabl_result['Id_page'].'">';
		$menu_retour .= $tabl_result['Titre'];
		$menu_retour .= '</a>';
		$menu_retour .= '</li>';
	}
	$menu_retour .= '</ul>';
	return $menu_retour;
}
?>

voici mon fichier de connexion à ma BDD
//données pour la connexion à la base de données local
$PARAM_hote             ='localhost';     	//nom du serveur mysql
$PARAM_nom_bdd          ='mon_site'; 	//le nom de la base de données
$PARAM_utilisateur      ='root';          	//login
$PARAM_mot_passe        ='';              	//mot de passe pour se connecter

	try
	{
//connexion à la BDD (Création d'une instance de la classe PDO)
//On cré l'objet $bdd à l'aide de la commande new suivi du nom de la classe
    $bdd = new PDO('mysql:host=' . $PARAM_hote . ';dbname=' . $PARAM_nom_bdd, $PARAM_utilisateur, $PARAM_mot_passe);
	}

	catch(Exception $e)
	{
//sinon on affiche l'erreur
    echo 'Erreur : ' . $e->getMessage() . '<br />';
    echo 'N° : ' . $e->getCode();
	}

A voir également:

20 réponses

hervé56 Messages postés 269 Date d'inscription lundi 15 novembre 2010 Statut Membre Dernière intervention 25 mars 2017 10
17 juil. 2011 à 15:44
je sais pas ce qu'il y a entre tes parenthèses alors voila comment je fait :

// force la conection en utf-8
$option = array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"); 

$pdo = new PDO('mysql:host=' . HOTE_BASE . ';dbname=' . NOM_BASE, USER_BASE, PASS_BASE, $option);
1
hervé56 Messages postés 269 Date d'inscription lundi 15 novembre 2010 Statut Membre Dernière intervention 25 mars 2017 10
16 juil. 2011 à 20:12
ca sert a rien de coller ces 30 lignes, bref

1/ tu instancie ton objet PDO
2/ tu cree ta requete
3/ tu la passe dans ton objet

1:
$pdo = new tonObjet_PDO;

2:
$sql = "select * from ta_table";

3:
$tableau_retourné = $pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC);

voila un exemple ultra grossier
0
troubadour2 Messages postés 277 Date d'inscription vendredi 11 juin 2010 Statut Membre Dernière intervention 19 juin 2016 1
16 juil. 2011 à 23:17
Bonjour et merci hervé56,
Je vois que tu es toujours fidèle c'est génial.
En fait pour qu'on puisse m'expliquer j'ai toujours l'impression qu'il faut mettre un maximum de code.
Ok je vais essayer de comprendre tes explications et me mettre à l'oeuvre.
A+
0
troubadour2 Messages postés 277 Date d'inscription vendredi 11 juin 2010 Statut Membre Dernière intervention 19 juin 2016 1
17 juil. 2011 à 11:03
Bonjour

Tu peux me dire ce qui ne va pas s'il te plait "ligne d'erreur".

$bdd = new PDO(.........);
$sql = "SELECT * FROM menu WHERE Id_page = :id_page";
$resultat = $bdd->prepare($sql);
$resultat->execute(array(":id_page"   => $_ENV["id_page"]));

$tabl_result = $bdd->query($resultat)->fetchAll(PDO::FETCH_ASSOC); 


Notice: Undefined variable: bdd in D:\EasyPHP-5.3.3.1\www\site_clique\fonction\fonction.php on line 66

Fatal error: Call to a member function prepare() on a non-object in D:\EasyPHP-5.3.3.1\www\site_clique\fonction\fonction.php on line 66
0
hervé56 Messages postés 269 Date d'inscription lundi 15 novembre 2010 Statut Membre Dernière intervention 25 mars 2017 10
17 juil. 2011 à 11:13
pdo est activé nativement avec easy php ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
troubadour2 Messages postés 277 Date d'inscription vendredi 11 juin 2010 Statut Membre Dernière intervention 19 juin 2016 1
17 juil. 2011 à 15:00
Ben en fait je n'ai pas trouvé la ligne dans le fichier php.ini
extension=php_pdo.dll

il y a juste celle-ci
extension=php_pdo_mysql.dll
0
troubadour2 Messages postés 277 Date d'inscription vendredi 11 juin 2010 Statut Membre Dernière intervention 19 juin 2016 1
17 juil. 2011 à 16:57
entre mess parentheses il y a la connexion à ma BDD que je n'ai pas mis.....
pour ne pas surcharger le post...

malheureusement ça ne veux toujours pas fonctionner.
Merci de ton aide
0
hervé56 Messages postés 269 Date d'inscription lundi 15 novembre 2010 Statut Membre Dernière intervention 25 mars 2017 10
17 juil. 2011 à 18:11
essaie sur ton serveur si t'en a un
pask ca doit marcher, ca vien surement d'easy php

essaie de regarder en faisant un phpinfo()
0
troubadour2 Messages postés 277 Date d'inscription vendredi 11 juin 2010 Statut Membre Dernière intervention 19 juin 2016 1
18 juil. 2011 à 00:14
Bonjour

Je pense plutot que ma fonction n'est pas bonne, qu'en penses tu ?
0
hervé56 Messages postés 269 Date d'inscription lundi 15 novembre 2010 Statut Membre Dernière intervention 25 mars 2017 10
18 juil. 2011 à 10:55
y a pas 50 solutions, si tu initialise un objet PDO et que tu lui passe une bonne requete ca doit marcher, a part si easyphp n'accepte pas nativement le PDO
0
troubadour2 Messages postés 277 Date d'inscription vendredi 11 juin 2010 Statut Membre Dernière intervention 19 juin 2016 1
18 juil. 2011 à 15:47
Bonjour

Voilà j'ai initialisé mon objet PDO ça c'est bon.
$bdd = new PDO('mysql:host=' . $PARAM_hote . ';dbname=' . $PARAM_nom_bdd, $PARAM_utilisateur, $PARAM_mot_passe);

Je voudrais utiliser la methode "binParam()" avec les fameuses requètes préparées.
Par contre ma connexion à ma BDD est dans un fichier externe.

Peux tu me donner quelques infos pratique sur le net c'est quelque peu flou les explications, enfin pour moi puisque je commence avec PDO.
je te remercie.
0
hervé56 Messages postés 269 Date d'inscription lundi 15 novembre 2010 Statut Membre Dernière intervention 25 mars 2017 10
18 juil. 2011 à 16:00
déja essaie de faire une requete toute conne pour voir si ca marche

$sql = "SELECT * FROM ta_table";
$resultat = $pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC);

print_r($resultat);
0
troubadour2 Messages postés 277 Date d'inscription vendredi 11 juin 2010 Statut Membre Dernière intervention 19 juin 2016 1
18 juil. 2011 à 17:14
ça c'est ok ça me retourne bien toutes les valeurs.
0
hervé56 Messages postés 269 Date d'inscription lundi 15 novembre 2010 Statut Membre Dernière intervention 25 mars 2017 10
18 juil. 2011 à 17:22
je peut pas te faire un cour coomme ca sans rien, essaie de toi meme et revien avec le probleme que tu rencontre plutot :)
0
troubadour2 Messages postés 277 Date d'inscription vendredi 11 juin 2010 Statut Membre Dernière intervention 19 juin 2016 1
18 juil. 2011 à 17:43
pourquoi si je rajoute un WHERE ça me génére une erreur?

$sql = "SELECT * FROM menu WHERE Id_page = :id_page";
$resultat = $bdd->query($sql)->fetchAll(PDO::FETCH_ASSOC);

Fatal error: Call to a member function fetchAll() on a non-object in
0
hervé56 Messages postés 269 Date d'inscription lundi 15 novembre 2010 Statut Membre Dernière intervention 25 mars 2017 10
18 juil. 2011 à 18:09
pask tu n'a aucun retour vu que tu n'as probablement aucunes Id_page qui s'appellent :id_page

on utilise :var et ? pour des requetes preparée (execute) pas des simples query
0
vincebzh Messages postés 137 Date d'inscription lundi 22 mars 2010 Statut Contributeur Dernière intervention 7 mai 2013 29
18 juil. 2011 à 19:45
Salut.
Ta requête est écrite comme si c'était une requête préparée.


Il faut que tu utilises la méthode prepare() de PDO. Ou alors que tu remplace :id_page par l'identifiant.

$sql = "SELECT * FROM menu WHERE id_page = :id_page";
$resultat = $bdd->prepare($sql);
$resultat->execute(array(':id_page' => 2));
if($resultat->rowCount()) {
 var_dump( $resultat->fetchAll(PDO::FETCH_ASSOC) );
}


Ou alors :


$sql = "SELECT * FROM menu WHERE id_page = 2";
$resultat = $bdd->query($sql);
if($resultat->rowCount()) {
 var_dump( $resultat->fetchAll(PDO::FETCH_ASSOC) );
}


Pour éviter les erreurs "Fatal error: Call to a member function fetchAll() on a non-object", utilises rowCount() pour vérifier que la requête retourne bien quelque chose.
0
troubadour2 Messages postés 277 Date d'inscription vendredi 11 juin 2010 Statut Membre Dernière intervention 19 juin 2016 1
19 juil. 2011 à 00:22
Bonjour

Merci pour vos explications je vais regarder tout ça.

Merci encore et je vous tiens au courant.
0
troubadour2 Messages postés 277 Date d'inscription vendredi 11 juin 2010 Statut Membre Dernière intervention 19 juin 2016 1
22 juil. 2011 à 00:34
Merci pour tout rien ne va ça m'ennuie de rester comme ça.
Pouvez-vous encore me donner quelques explications.
Je vous remercie.

avec ce code ça me retourne rien
$sql = "SELECT * FROM menu WHERE id_page = :id_page";
$resultat = $bdd->prepare($sql);

$resultat->execute(array(':id_page'   => $_ENV['id_page']));
if($resultat->rowCount()) {
 var_dump( $resultat->fetchAll(PDO::FETCH_ASSOC) );
}

par contre si j'execute comme ça ça me retourne bien mes valeurs
$resultat->execute(array(':id_page' => 3));
0
hervé56 Messages postés 269 Date d'inscription lundi 15 novembre 2010 Statut Membre Dernière intervention 25 mars 2017 10
22 juil. 2011 à 06:49
et ca c'est quoi ? $_ENV['id_page']
0
troubadour2 Messages postés 277 Date d'inscription vendredi 11 juin 2010 Statut Membre Dernière intervention 19 juin 2016 1
22 juil. 2011 à 08:38
Bonjour

Mon tableau associatif de variable que j'ai passé avec la méthode d'environnement $_ENV
En fait j'ai passé mes variables dans une fonction avec une variable superglobale
au début de mon script.

j'ai une erreur sur cette fonction qui me dit que $bdd n'est pas initialisée
voici l'erreur
Notice: Undefined variable: bdd in D:\EasyPHP-5.3.3.1\www\mon_site\fonction\fonction.php on line 92

function affiche_menu($idpage) {
$sql = 'SELECT * FROM menu WHERE Id_parent = :id_page';
	$resultat = $bdd->prepare($sql);
	$resultat->execute(array(':id_page'   => $idpage));
$donnees = $resultat->fetchAll();
	if (mysql_num_rows($resultat) == 0) {
		$sql = 'SELECT 'Id_page', 'Titre' FROM 'menu' WHERE 'Id_parent' = '.$_ENV['id_parent'];
	$resultat = $bdd->prepare($sql);
	$resultat->execute(array(':id_page'   => $_ENV['id_parent']));
    $donnees = $resultat->fetchAll();
	}
	$menu_retour = '<ul>';
	while ($resultat = mysql_fetch_array($donnees)) {
		$menu_retour .= '<li>';
		$menu_retour .= '<a href="index.php?id_page='.$donnees['Id_page'].'">';
		$menu_retour .= $donnees['Titre'];
		$menu_retour .= '</a>';
		$menu_retour .= '</li>';
	}
	$menu_retour .= '</ul>';
	return $menu_retour;
}
?>


pourtant j'ai fait
$bdd = new PDO('mysql:host=' . $PARAM_hote . ';dbname=' . $PARAM_nom_bdd, $PARAM_utilisateur, $PARAM_mot_passe);


Merci
0
hervé56 Messages postés 269 Date d'inscription lundi 15 novembre 2010 Statut Membre Dernière intervention 25 mars 2017 10
22 juil. 2011 à 12:44
ca sert a rien de faire tout ca, essaie déja de faire un truc simple, la c'est tout mélangé (PDO , mysql_fetch_array ...)
et on ne place pas des variables d'environement pour ca mais ca c une autre histoire...
0
troubadour2 Messages postés 277 Date d'inscription vendredi 11 juin 2010 Statut Membre Dernière intervention 19 juin 2016 1
1 août 2011 à 14:18
Tout fonctionner à merveille comme je veux merci
0