IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Utilisation du tuto sur une utilisation facile de PDO


Sujet :

Langage PHP

  1. #21
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut laurentSc,

    le script de connexion donné par Dendrite est exempt de toute classe, c'est du procédural.
    Alors fais exactement ceci, stp :
    Tu créés un nouveau fichier à la racine de ton site web que tu vas appeler db_cnx.php
    Ensuite dedans tu vas coller ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <?php
    // @author : rawsrc - 2018 - Pour DVP
    if ( ! function_exists('db_connexion')){
       function db_connexion() {
          static $pdo;
          if(!($pdo instanceof PDO)){
             try{
                $pdo = new PDO('mysql:localhost;port=3306;dbname=rh', 'root', '', [
                PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
                PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
                PDO::ATTR_EMULATE_PREPARES   => false
                ]);
             }catch(PDOException $e){
                throw new InvalidArgumentException('Erreur connexion à la base de données : '.$e->getMessage());
                exit;
             }
          }
          return $pdo;
       }
    }
    return db_connexion();
    Et pour la ligne 8 : $pdo = new PDO('mysql:localhost;port=3306;dbname=rh', 'root', '', [, tu vas remplacer par tes paramètres de connexion :
    $pdo = new PDO('mysql:ADRESSE IP DU SERVEUR MYSQL;port=3306;dbname=NOM DE LA BASE DE DONNEES', 'UTILISATEUR', 'MOT DE PASSE', [Ensuite partout où tu auras besoin de la connexion, il te suffira de faire :
    $pdo = include 'db_cnx.php'; // avec ici le chemin complet vers le fichier de connexion

  2. #22
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    C'est exactement ce que j'ai fait, mais autant si je teste ça en local (Wampserver), ça marche nickel, autant sur serveur, ça rame et le navigateur plante (IE car avec Firefox, ça marche) : http://vercorshandisport.org/pdo2/testconnexion.php

    Je souhaiterais un code qui marche même sous IE...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  3. #23
    Membre éprouvé Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 540
    Points : 1 067
    Points
    1 067
    Par défaut
    @rawsrc, effectivement, autant pour moi.
    Le bienfait n'est jamais perdu

  4. #24
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Le navigateur n'a rien à voir avec le plantage. Le navigateur ne fait que recevoir des données et les affiche. Si tu ramasses une erreur c'est qu'elle provient du serveur.
    Donc ton traitement php doit se manger une limite du serveur : soit un timeout, soit il atteint la limite max de mémoire allouée, soit tu fais appel à une fonction qui a été explicitement désactivée. Bref, des raisons possibles y en a des tonnes. Faut investiguer, mais oublie le navigateur.

  5. #25
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    C'est exactement ce que j'ai fait...
    MONTRE ce que tu as fait...
    ...Qu'on rigole...........
    Avec toi, on s'attend toujours à des vices cachés... du code que tu ne montres pas...



    Je connais des gens qui ne peuvent pas s'approcher d'un appareil électro-ménager sans qu'il tombe en panne...
    Loose ? Mauvais karma ? Mauvaise énergie ?...
    Qui sait....
    Dernière modification par Invité ; 30/05/2018 à 13h24.

  6. #26
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    C'est pas impossible que sur ton serveur, le client PDO pour mysql ne soit pas configuré... ou pour quoi que ce soit...
    C'est quoi ton serveur ? Tu peux faire un phpinfo() ?
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  7. #27
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    tout fonctionne très bien sauf que tu sembles extraire une encyclopédie de la base de données d'où l'erreur : tu dois atteindre une limite de serveur.
    Ensuite il faut que tu regardes tes logs parce que les erreurs sur ton site y en a des tas.

  8. #28
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Tu peux nous montrer ta requête SQL Laurent ?
    Si rawsrc a raison, ajoute LIMIT 10 pour voir si ça te décoince.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  9. #29
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Je me précipite à répondre car les posts 18 et 25 m'ont sacrément encouragé !

    Avant de lire le post 28 de Dendrite, j'ai fait le ménage dans ma table SQL et je n'ai plus d'erreur...

    Néanmoins, pour amuser la galerie, mon test était le suivant :

    db_mysql.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <?php
    if ( ! function_exists('db_connexion')){
       function db_connexion() {
          static $pdo;
          if(!($pdo instanceof PDO)){
             try{
                $pdo = new PDO('mysql:host=localhost;port=3306;dbname=calendar', 'root', '', [
                PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
                PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
                PDO::ATTR_EMULATE_PREPARES   => false
                ]);
             }catch(PDOException $e){
                throw new InvalidArgumentException('Erreur connexion à la base de données : '.$e->getMessage());
                exit;
             }
          }
          return $pdo;
       }
    }
    return db_connexion();
    ?>

    testconnexion.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <?php
    $pdo = include 'db_mysql.php';
    $sql='SELECT event_id,event_date
    FROM `calendar_event`
    WHERE year(event_date)>=?';
    $data=array();
    try {
       $stmt = $pdo->prepare($sql);
       $stmt->execute(array(2018));
       while($row= $stmt->fetch(PDO::FETCH_ASSOC)){
          $data[]=$row;
       }
       unset($pdo);
       if(sizeof($data)>0){
          echo '<pre>';
          print_r($data);
          echo '</pre>';
       }
    } 
    catch (Exception $e) {
       print "Erreur ! " . $e->getMessage() . "<br/>";
    }
    ?>

    export de la bdd : calendar.sql :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    50
    51
    52
    53
    54
    55
    56
    57
    -- phpMyAdmin SQL Dump
    -- version 4.7.4
    -- https://www.phpmyadmin.net/
    --
    -- Hôte : 127.0.0.1:3306
    -- Généré le :  lun. 07 mai 2018 à 14:54
    -- Version du serveur :  5.7.19
    -- Version de PHP :  5.6.31
     
    SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
    SET AUTOCOMMIT = 0;
    START TRANSACTION;
    SET time_zone = "+00:00";
     
     
    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8mb4 */;
     
    --
    -- Base de données :  `calendar`
    --
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `calendar_event`
    --
     
    DROP TABLE IF EXISTS `calendar_event`;
    CREATE TABLE IF NOT EXISTS `calendar_event` (
      `event_id` mediumint(8) UNSIGNED NOT NULL AUTO_INCREMENT,
      `event_date` date NOT NULL,
      `event_time` time NOT NULL,
      `event_name` varchar(100) NOT NULL,
      `event_comment` text NOT NULL,
      `event_allday` tinyint(1) NOT NULL,
      PRIMARY KEY (`event_id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1733 DEFAULT CHARSET=latin1;
     
    --
    -- Déchargement des données de la table `calendar_event`
    --
     
    INSERT INTO `calendar_event` (`event_id`, `event_date`, `event_time`, `event_name`, `event_comment`, `event_allday`) VALUES
    (1727, '2018-04-10', '00:00:00', 'cc', 'cc', 1),
    (1728, '2018-04-11', '00:00:00', 'cc', 'cc', 1),
    (1729, '2018-04-12', '00:00:00', 'cc', 'cc', 1),
    (1730, '2018-04-17', '00:00:00', 'ww', 'ww', 0),
    (1731, '2018-04-18', '00:00:00', 'ww', 'ww', 0),
    (1732, '2018-04-19', '00:00:00', 'ww', 'ww', 0);
    COMMIT;
     
    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
    Le problème que j'avais, c'est quand il y avait plusieurs dizaines d'enregistrements dans la table de la bdd.

    Vous allez vous ennuyer, car je vais être absent de demain à samedi prochain...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  10. #30
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Pas compris ce qui coinçait Laurent...

    Mais à part ça, dans ton cas précis, il faut que tu changes ça dans db_mysql.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES latin1',
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  11. #31
    Invité
    Invité(e)
    Par défaut
    Houla, Dendrite... Ne va pas nous le casser... (on n'a plus les pièces...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ) ENGINE=InnoDB AUTO_INCREMENT=1733 DEFAULT CHARSET=latin1;
    Conseille-lui plutôt de modifier ses tables en BDD pour les mettre en utf-8.
    Dernière modification par Invité ; 07/05/2018 à 18h53.

  12. #32
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    On n'a pas toujours la main sur cet aspect.
    Laurent ?
    Si tu voulais tout modifier en utf-8, car tu aurais la main, et que ta base était vierge... C'est clair, modifie en suivant ce simple tuto à la lettre :

    https://j-willette.developpez.com/tu...-site-en-utf8/

    Si tu as la main et que ta base est déjà bourrée de données... c'est plus compliqué. Car il faut transformer les données existantes d'iso machin vers utf-8 de façon sécurisée.
    Jreaux ? Tu connais un bon tuto sur développez ?
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  13. #33
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Hello Dendrite
    Ma base ne contient pour l'instant que des essais.

    Mon intention était d'exporter celle-ci de modifier le fichier sql notamment ma création de la table puis de supprimer la table et importer le fichier modifié.
    Mais là où ça coincait c'est pour supprimer la table car pas moyen de modifier mes droits.
    Quand je serai rentré (le week-end prochain) j'essaierai d'utiliser le tutoriel que tu cites et que je connais.
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  14. #34
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Ca y est ; je viens de m'y remettre.

    Pour modifier la base, plutôt que d'appliquer le tuto, j'ai trouvé plus simple :
    • j'ai d'abord exporté la base (fichier sql).
    • J'ai modifié l'interclassement (charset à utf8),
    • puis j'ai supprimé la base et l'ai recréée avec le fichier sql modifié.

    Le tour est joué et la connexion fonctionne.

    Je vais maintenant tenter d'appliquer mon fichier de test à mon site...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  15. #35
    Membre régulier Avatar de Zembla
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 94
    Points : 88
    Points
    88
    Par défaut
    j'adore cette discussion. Y'a la saison 2 ?
    En tout cas merci , car c'est très instructif.

  16. #36
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Oui, merci Laurent...

    Au passage, je remets ici le lien vers le billet de blog, puisque le tuto collaboratif "PDO, une soupe et au lit !" est devenu un billet de blog...
    En attendant de devenir un article...

    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. des tuto sur l'utilisation des composant ado
    Par kroma23 dans le forum Bases de données
    Réponses: 1
    Dernier message: 12/11/2008, 08h51
  2. [awk] Utiliser plusieurs FS sur une même ligne
    Par novices dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 06/08/2008, 18h45
  3. Réponses: 11
    Dernier message: 24/03/2007, 16h01
  4. Utilisation des Frames sur une Forms
    Par selmak7 dans le forum C++Builder
    Réponses: 5
    Dernier message: 20/07/2006, 17h42
  5. [TChart] Comment utiliser le curseur sur une courbe ?
    Par marsupilami34 dans le forum Composants VCL
    Réponses: 4
    Dernier message: 29/09/2005, 16h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo