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

PHP & Base de données Discussion :

Format des données extraites de la base de données [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2015
    Messages : 33
    Par défaut Format des données extraites de la base de données
    Bonjour à tous ,

    Je viens vers vous pour une question qui peux paraître stupide mais je ne comprend pas et j'ai regardé sur le net et j'ai rien trouvé.

    je voulais savoir, les données extraites d'une base de données sont forcement convertit au format "string".

    je m'explique quand je fait un 'SELECT * FROM test', je récupère les données de ma table 'test' et imaginons que ma table 'test' contienne deux champs , 'nombre' -> 'int' et 'prenom' -> varchar(64)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $reponse = $bdd->query('SELECT * FROM test');
    while ($donnees = $reponse->fetch()){
    		echo gettype($donnees['nombre']);
    	}
    il me dit que $donnees['nombre'] est un 'string'.

    moi je voudrais garder la structure de ma base. donc savoir si c'est possible.

    je comprend pas pourquoi il convertit tout en string.

    merci à vous tous pour vos lumières !!!!!

  2. #2
    Membre Expert

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    Salut,

    ça rentre dans la logique de php qui est faiblement typé de ne rien caster. Rien ne t'empêche par contre de caster toi-même ton résultat avec le type que tu désires mais c'est bien souvent inutile vu que ce n'est pas contraignant, ton code ne plantera pas si le typage utilisé n'est pas le bon.

    A noter que dans d'autres langages qui a contrario seraient fortement typés dans tous les cas la déduction du type ne sera jamais "automatique" naturellement vu qu'il n'existe aucune relation parfaite entre les types utilisés par le SGBD et ceux utilisés par le langage.

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2015
    Messages : 33
    Par défaut
    ok , je te remercie pour la réponse, en faite je voulais faire un backup hebdomadaire de la bdd, donc je voulais savoir le type de la colonne pour mettre des guillemets (ou pas, en fonction du type) lors de l'INSERT.

    voilà tout, je te remercie

  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Hum ta réponse me laisse perplexe, car je viens de faire un test sur mon id et j'ai bien "integer" comme réponse, ce qui est normal puisque c'est un entier dans ma db.
    PHP a beau être de typage faible cela me semble incohérent cette histoire de 'string'.

    Si tu fais un dump de ta db on peut voir la création (code sql) de ta table ?

  5. #5
    Membre Expert

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    Testé de mon côté en php brut et j'ai des strings peut-importe le type en base et ça me semble logique, je ne vois aucunement comment php pourrait faire de manière automatique un rapprochement entre le type int de la base (qui dépend en plus du SGBD) et son type int à lui.

  6. #6
    Membre Expert

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    Pour en revenir à la question du dump, je te conseillerais de privilégier l'exécution d'une commande comme "mysqldump" qui est prévue pour cela tout simplement et qui te simplifiera grandement la tâche.

  7. #7
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Pour ma part aussi en PHP Brut et je ne vois pas pourquoi PHP ne reprendrais pas le type de la DB.
    Si vous travailler en MySQL/MariaDB strict et que vous passer un string au lieu d'un int vous auriez des erreurs.

    Si vous faites

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    $t = 5;
    var_dump(gettype($t))
    Vous aurez un entier

  8. #8
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2015
    Messages : 33
    Par défaut
    Mais moi aussi je ne vois pas pourquoi php ne reprendrais pas le type de la DB.

    C'est exactement mon problème

  9. #9
    Membre Expert

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    Juste pour être sur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
     
    $dsn = 'mysql:dbname=test;host=localhost';
    $user = 'root';
    $password = '';
     
    $dbh = new PDO($dsn, $user, $password);
     
     
    $res = $dbh->query("SELECT * FROM truc")->fetchAll();
     
    var_dump($res);
    $res ne peut contenir que des strings là non ? En tout cas moi c'est bien ce que j'obtiens et encore une fois, je vois pas comment il pourrait en être autrement

  10. #10
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2015
    Messages : 33
    Par défaut
    si je fais show create table revendeurs j'obtiens :
    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
     
    CREATE TABLE `revendeurs` (
      `rev_id` int(11) NOT NULL AUTO_INCREMENT,
      `rev_email` varchar(255) NOT NULL,
      `rev_rang` int(11) NOT NULL,
      `rev_mdp` varchar(500) NOT NULL,
      `rev_firstconnexion` int(11) NOT NULL,
      `rev_token` varchar(32) NOT NULL,
      `rev_nom` varchar(30) NOT NULL,
      `rev_prenom` varchar(30) NOT NULL,
      `rev_tiers` varchar(10) NOT NULL,
      PRIMARY KEY (`rev_id`),
      UNIQUE KEY `rev_email` (`rev_email`),
      UNIQUE KEY `rev_token` (`rev_token`)
    ) ENGINE=MyISAM AUTO_INCREMENT=112 DEFAULT CHARSET=utf8
    donc ensuite je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     $test = 'select * from revendeurs';
    $test2 = $Edb->query($test)->fetchAll();
    var_dump($test2);
    et j'obtiens :
    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
    22
    23
    24
     
    array(22) {
      [0]=>
      array(9) {
        ["rev_id"]=>
        string(2) "95"
        ["rev_email"]=>
        string(23) "vnaldo@itcomservices.fr"
        ["rev_rang"]=>
        string(2) "10"
        ["rev_mdp"]=>
        string(12) "cayaqqvfm20="
        ["rev_firstconnexion"]=>
        string(1) "0"
        ["rev_token"]=>
        string(32) "36a9015b110aa37cf6cca7f5881a3148"
        ["rev_nom"]=>
        string(5) "NALDO"
        ["rev_prenom"]=>
        string(7) "Vincent"
        ["rev_tiers"]=>
        string(6) "347916"
      }
      [1]=>...
    je n'affiche qu'une valeur de ma table
    et elles sont bien toute au format string

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 04/01/2016, 12h30
  2. Réponses: 0
    Dernier message: 15/05/2014, 17h31
  3. Réponses: 8
    Dernier message: 25/07/2010, 10h15
  4. [base de donnée] accée a la base de données sur eclipse
    Par khalidlyon dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 07/04/2005, 22h12
  5. [base de données]partage d'une base de données
    Par Scrusher dans le forum JDBC
    Réponses: 4
    Dernier message: 02/06/2004, 13h33

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