CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[PHP] Connection à PDO

cedh
cedh
Niveau 6
23 avril 2016 à 03:26:54

Bonjour à tous,

J'ai suivi le cours d'initiation à PHP et MYSQL d'Open classrooms et vu qu'il était recommandé d'utiliser l'extension PDO pour se connecter à une base de données. Je teste le code type fourni dans le cours, aucun problème, la connexion se fait bien.

$bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');

Ensuite, j'ai cherché à me documenter sur PDO pour savoir un peu mieux comment ça marche. Je tombe alors sur le site suivant : http://fmaz.developpez.com/tutoriels/php/comprendre-pdo/
Ce site propose apparemment un autre moyen de se connecter à la base de données. En fait, la séquence de code est plus ou moins similaire à celle du cours d'OC, mais il y a quelques nuances que je ne comprends pas. Voilà ce qu'on nous dit :

try {
    $strConnection = 'mysql:host=localhost;dbname=ma_base'; //Ligne 1
    $arrExtraParam= array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"); //Ligne 2
    $pdo = new PDO($connStr, 'Utilisateur', 'Mot de passe', $arrExtraParam); //Ligne 3; Instancie la connexion
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);//Ligne 4
}
catch(PDOException $e) {
    $msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
    die($msg);
}

Voilà ce que j'ai pu en tirer :

Ligne 1 : On stocke le type de bdd et le nom de la bdd dans une variable $StrConnection

Ligne 2 : On récupère le charset utf8, on le met lui aussi dans une variable

Ligne 3 : C'est là que ça me pose problème. On instancie la connection à la base de données via PDO. Or, la variable contenant les informations de la ligne 1 ne correspond pas (en ligne 1, on a $StrConnection ; en ligne 3, c'est $ConnStr). Du coup, je ne comprends pas d'où sort cette nouvelle variable $ConnStr, pourquoi ne pas réutiliser $StrConnection? C'est une erreur de l'auteur ou j'ai raté quelque chose?

En outre, même en remplaçant en ligne 3 la variable $ConnStr par $StrConnection, le code ne fonctionne pas. J'arrive pas à me connecter à la BDD, ce code est bizarre. Je sais que c'est pas forcément vital mais j'aimerais bien comprendre pourquoi cette séquence de code ne fonctionne pas. Si vous avez une explication, je suis tout ouïe. Merci d'avance

Message édité le 23 avril 2016 à 03:28:19 par cedh
fluxies
fluxies
Niveau 17
23 avril 2016 à 10:35:57

Bonjour,

Ca fait plaisir de voir des questions détaillés comme ca.

Alors oui pour ton premier point $conStr vs l'autre str, c'est bien une erreur de l'auteur.

Quand tu dis que le code ne fonctionne pas, c'est quoi le problème, tu as une erreur d'affiché ou aucun output ?

cedh
cedh
Niveau 6
23 avril 2016 à 14:21:14

Bonjour fluxues, merci pour ta réponse rapide qui confirme mes soupçons sur ce code ... Il s'est donc bien trompé en indiquant de mauvais noms de variables, ce qui est premier point :(

Concernant le message d'erreur je n'ai aucun output , juste mon code sous forme de texte avec une page blanche comme tu peux le voir

https://image.noelshack.com/fichiers/2016/16/1461413875-1.png

( J'ai bien sûr pensé à bien mettre les identifiants qui correspondent à mon serveur et à ma base de données dans la ligne de connection )

Voilà où j'en suis, j'ai une partie du code qui n'est pas interprétée comme du code et pas la moindre idée de ce qui va pas :(

Message édité le 23 avril 2016 à 14:24:32 par cedh
fluxies
fluxies
Niveau 17
23 avril 2016 à 17:36:28

Ca veut dire qu'il ne reconnait pas le code php, et croit que c'est un simple texte.

As tu bien mis le <?php, tout en haut de ton fichier sans rien le précédant?

C'est quand même bizarre que l'output commence au milieu de ton code par contre

cedh
cedh
Niveau 6
23 avril 2016 à 18:16:53

Ou tout à fait c'est étonnant et pas très logique, ça voudrait dire que le début du code est bien interprété comme du php, mais pas la
fin... Or, on remarque que l'erreur commence juste après la fonction
MYSQL_ATTR_UNIT_COMMAND. J'ai donc cherché cette fonciton sur Google et je suis tombé sur le sujet suivant : http://www.commentcamarche.net/forum/affich-29217514-comment-resoudre-un-probleme-de-connection-a-la-base-des-donnees

Donc j'ai pu résoudre le problème en bidouillant un peu n'importe quoi, je vais te dire la manip que j'ai au cas où ça t'intéresse :(

Je suis donc parti de l'idée que la non-reconnaissance de cette fonction proviendrait du fait que le driver n'était pas à jour :( Du coup, j'ai ouvert l'onglet WAMP dans la barre des tâches ). Puis je suis allé dans les extensions de PHP, via l'onglet suivant :

https://image.noelshack.com/fichiers/2016/16/1461427637-wtf.png

Ensuite j'avais une liste de drivers / extensions qui s'affichent dans une fenêtre. J'en ai activé plusieurs au hasard sans savoir ce que je faisais, et au final j'ai du activer la bonne extension dans le lot parce que ça a fini par marcher. Bref, j'en sais pas plus, j'ai plus de message d'erreur mais aucune idée de la manip qui a rectifié le problème :(

moralité : avant, ça marchait pas et je savais pas pourquoi
maintenant : ça marche, et je sais toujours pas pourquoi

Merci quand même d'avoir tenté de m'aider ... alors du coup mon code passe mais ça sert à rien parce que je sais pas ce qui en est la cause. J'ai un peu l'impression d'être le mec qui met des patates dans son téléviseur car ça fait de la neige et tout d'un coup, ça remarche sans raison apparente :(

Message édité le 23 avril 2016 à 18:18:08 par cedh
fluxies
fluxies
Niveau 17
24 avril 2016 à 10:16:40

Avant ca marchait pas tu ne savais pas pourquoi, mais la tu sais pourquoi non ? C'était une extension, peut-être un bail PDO, ensuite le code tu le comprends donc tout va bien non?

Ce qui est dommage c'est que t'ai pas eu l'erreur d'afficher. Ca peut vite être problématique.

Si tu fais $george = []; $george[0]++, ca t'affiches quelquechose ?

Vérifie ton fichier de configuration php (php.ini), ou ajoute en haut de ton code
ini_set('display_errors', 1)
error_reporting(E_ALL) (Ou qqchose comme ca)

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment