Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PDO
PDO Forum d'entraide sur PDO (PHP Data Objects) : pilote générique de bases de données avec PHP. Avant de poster -> FAQ PDO et Cours PDO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/09/2011, 15h53   #1
Invité de passage
 
Homme
Inscription : septembre 2011
Messages : 31
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : septembre 2011
Messages : 31
Points : 0
Points : 0
Par défaut [PDO] Intégrer PDO dans une classe

Bonjour a tous !

Je suis en train de réécrire du code que j'avais écrit en procédural pour "tester" .

Donc je réécrit tout se beau monde de façon plus propre et réutilisable !

Donc mon code est fait pour créer des tinyurl avec mon propore nom de domaine.
Et j'ai besoin de travailler avec une base de données ,le truc c'est que je n'arrive pas a intégré PDO dedans ...


Voila le code sans PDO :


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
 
<?php
 
class LitiiUrl
{
    private $hash;
    private $urlBrowser;
    private $redirect;
 
    public function generateLitiiKey($nbcar)//Génère une clé alléatoire 
    {
                $string = "";
                $chaine = "abcdefghijklmnopqrstuvwxyzABCDEFGJHIJKLMNOPQRSTUVWXYZ0123456789";//les caractères autorisés dans la clé.
                srand((double)microtime()*1000000);
 
                for($i = 0; $i < $nbcar; $i++) 
                {
                 $string .= $chaine[rand() % strlen($chaine)];
                }
                $this->hash=$string;
                return $string;
 
    }
 
    public function getLitiiUrl()
    {
        $this->urlBrowser = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
        echo '<br>'.$this->urlBrowser;              
    }
 
    public function WriteDataBase()
    {
        $resultat=executeRequeteSQL("INSERT INTO tinyurl (url_utilisateur , url_reduite) VALUES('$this->urlBrowser' , '$this->hash')", 'Error : Litii Url Not write in database ');
        return $resultat;
    }
 
    public function fecthDataBase()
    {
        $reponse = mysql_query('SELECT url_utilisateur , url_reduite FROM tinyurl WHERE url_reduite="'.$this->hash.'"');//Sélectionne tous les champs de la table tynirul lorsque le champ url_reduite est égal à YRfz3Z
 
          while ($donnees = mysql_fetch_array($reponse))
               {
                echo '<br>'.'la cle est ' . $donnees['url_reduite'] . ' et l\'adresse correspondante est : '.$donnees['url_utilisateur'].'<br />';
                $redirection=$donnees['url_utilisateur'];
               }
 
    }
}
?>
Code appelé dans mon contrôleur comme ceci ...


Code :
1
2
3
4
5
6
7
8
9
10
<?php
function index() {
 
        $this->load->library('LitiiUrl');
        echo $this->litiiurl->generateLitiiKey(6);
        echo $this->litiiurl->getLitiiUrl();
        echo $this->litiiurl->writeDataBase();
        echo $this->litiiurl->fecthDataBase();
        die();
?>
blinkman04 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2011, 15h56   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 991
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 991
Points : 5 032
Points : 5 032
Et si tu nous disait plutôt ce qui coince exactement ?
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2011, 16h05   #3
Invité de passage
 
Homme
Inscription : septembre 2011
Messages : 31
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : septembre 2011
Messages : 31
Points : 0
Points : 0
Oh le boulet j'ai zappé -_-

Autant pour moi !

Donc dans mon code procédural j'avais :

-pour me connecter
Code :
1
2
3
4
<?php
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
                             $bdd = new PDO('mysql:host=;dbname=tinyurl_litii', 'root', '');
?>
pour réaliser les opération dont j'ai besoin :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$req=$bdd->prepare(('INSERT INTO tinyurl (url_utilisateur , url_reduite) VALUES(:url_utilisateur , :hash)'));//requête d'écriture de l'url dans la BDD
                                       if ($req->execute(array(//Exection de la requête (écriture de l'url dans le champs url_tilisateur de la table tinyurl
                                                               'hash'=>$hash,
                                                               'url_utilisateur'=>$url_base
                                                              )))
                                                        {
                                                        }
                                                        else//Sinon , en cas de clé déjà existante dans la BDD, regénération de clé 
                                                        {
                                                             '<br><br>'.print $req->errorCode();
                                                             generateRandomString(6);
                                                             '<br>'.$hash = generateRandomString(6).'<br>';
                                                        }
                                                        } else 
                                                            {
                                                            //Si la variable $url_base!= ' ' alors il ne se passe rien.
                                                            }
?>
Le truc c'est que j'y intègre (en remplaçant le mysql_fetch ) dans ma fonction "fetchDataBase"

J'ai sa comme erreur :

Fatal error: Call to a member function prepare() on a non-object in...

J'ai réussi a contourner le problème en n'utilisant pas PDO mais bon .. Sa serais plus pratique quand même !
blinkman04 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2011, 16h08   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
tu montres ton code complet, executeRequeteSQL sort d'ou ?
$bdd est définie ou ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2011, 16h17   #5
Invité de passage
 
Homme
Inscription : septembre 2011
Messages : 31
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : septembre 2011
Messages : 31
Points : 0
Points : 0
ExecuteSQL fait appel une fonction dans une "librairie" faite maison :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php 
function executeRequeteSQL($requete, $messageErreur) {
 
    $CI = & get_instance();
//    $modeSQL = $CI->config->item('modeSQL');
    $modeSQL = $CI->config->item('mode');
 
    if (strcmp($modeSQL, 'dev') === 0) {
        $resultatRequete = mysql_query($requete) or trace($messageErreur . mysql_error()); //die($messageErreur . mysql_error());
        return $resultatRequete;
    } else {
        $resultatRequete = mysql_query($requete);
        if ($resultatRequete === false) {
            header("Location: index.php?erreur");
        } else {
            return $resultatRequete;
        }
    }
}?>
Et $bdd ..je sais pas ou le déclarer.. (c'est la que je vois que j'ai pas totalement compris la POO ...
blinkman04 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2011, 16h21   #6
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
y'a zéro PDO dans ton code,

pour le reste c'est du basique :
http://php.net/manual/fr/language.variables.scope.php
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2011, 16h23   #7
Invité de passage
 
Homme
Inscription : septembre 2011
Messages : 31
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : septembre 2011
Messages : 31
Points : 0
Points : 0
prepare et execute ne sont pas PDO ?
blinkman04 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2011, 16h26   #8
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
Citation:
Envoyé par blinkman04 Voir le message
prepare et execute ne sont pas PDO ?
si mais dans executeRequeteSQL y'a pas de PDO, pour le reste on ne sais pas ou t'as définie $bdd, c'est un mystère ...
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2011, 16h29   #9
Invité de passage
 
Homme
Inscription : septembre 2011
Messages : 31
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : septembre 2011
Messages : 31
Points : 0
Points : 0
Ben le truc c'est que j'ai pas le droit de toucher a cette fonction ...

Donc je peux pas utiliser de PDO ici ?
blinkman04 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2011, 16h30   #10
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
Citation:
Envoyé par blinkman04 Voir le message
Ben le truc c'est que j'ai pas le droit de toucher a cette fonction ...

Donc je peux pas utiliser de PDO ici ?
en effet tu peux pas
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2011, 16h43   #11
Invité de passage
 
Homme
Inscription : septembre 2011
Messages : 31
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : septembre 2011
Messages : 31
Points : 0
Points : 0
Haaa... je comprend... -_-

Au moins je suis fixé ! (et je suis dégoûter d'avoir perdu des jours a cherché -_-!)

Me reste a crée une fonction qui test si la clé généré n'existe pas déjà auquel cas je redemande un génération...

PAs de problème sauf que je voulais vérifiez que j'avais mit un clé primaire le bon champ .. Mais Wamp ne veux plus lancer phpMyadmin ...

Aestan tray menu :

Could not execute menu item (internat error)
[Exception] Could not execute run action:
Nom de répertoire non valide .


Le truc c'est sa fonctionnais très bien y'a même pas deux heures ...
blinkman04 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h42.


 
 
 
 
Partenaires

Hébergement Web