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 :

convertir column type en string [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 238
    Par défaut convertir column type en string
    Bonjour

    Je cherche sans trouver comment convertir en php afin d'afficher en string, le type d'une donnée sql d'une requête simple (par ex : "SELECT * from bdd1") qui m'est toujours renvoyé sous sa forme numérique,

    ex : un int renvoyé est 3 en 'int', un varchar renvoyé est 253 en 'varchar', un test renvoyé est 252 en 'text',etc...

    (et d'ailleurs n'importe quel valeur ou type d'une colonne d'une table mais surtout le type !)

    dans une boucle par ex :

    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
    //Connection avec la BDD.
    $con=connectBdd("test2");
    $query = "SELECT * from bdd1";
                     
    echo "<table>";
    if ($result = mysqli_query($con, $query)) {
                     
    /* Récupère les informations d'un champ pour toutes les colonnes */
    $finfo = mysqli_fetch_fields($result);
     
    foreach ($finfo as $val) {
     echo "<tr class='all'>";
     echo ("<td class='entree'>   Name:           $val->name </td>");
     echo ("<td class='entree'>   Type:           $val->type </td>"); /* comment convertir $val->type en string en php*/</strong>
    //...
     echo "</tr>\n";
                     
    }
     
    mysqli_free_result($result);
                     
    }echo "</table>";
    ...
    Merci à vous

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Ça serait plus simple pour te comprendre si tu faisais des phrases complètes.

    Pour ton problème, quelqu'un a mis dans la documentation un correspondance des types :
    http://php.net/manual/fr/mysqli-result.fetch-fields.php

    Tu peux également lire directement la table INFORMATION_SCHEMA pour avoir le type exact de chaque colonne de ta table.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 238
    Par défaut
    Tu parles du deuxième commentaire ou du troisième qui liste le nom des types ?
    A part pour le deuxième commentaire qui propose un code pour convertir.
    La fonction retourne bien a part que :

    VAR_CHAR =>VAR_STRING
    TEXT=>BLOB
    et selon le integer cela donne LONG. Je crois comprendre vu que ça dépasse 4bit !

    alors que dans phpadmin il indique var_char et text et pour les numériques : int(x) .
    Est ce dû à <meta charset="utf-8" /> dans le head ou au navigateur ou à autre chose je ne sais pas ?
    Peut-être nul besoin de faire un tableau de correspondance perso.

    Ou alors je faits un tableau de correspondance perso.
    Il y a la même chose ici : http://php.net/manual/fr/mysqli-result.fetch-field.php

    Sinon oui je peux surement utiliser : http://php.net/manual/en/pdostatement.getcolumnmeta.php
    plus proche de phpadmin pour ["pdo_type"]

    Mais je crois qu'il n'y a pas plus simple, une fonction native de php qui renverrait le nom du type utilisé pour un champ dans la structure d'une table !

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Avec PDO tu as
    http://www.php.net/manual/en/pdostat...columnmeta.php

    Sinon il n'y a pas besoin d'une fonction native : comme tu le dis, un tableau de correspondance c'est une ligne de code.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 238
    Par défaut
    Pour getColumnMeta je crois qu'elle ne fonctionne pas avec ma version de php 5.6.25 ou la version de phpadmin. Je suis en local sur wamp version 3.

    http://php.net/manual/en/pdostatement.getcolumnmeta.php

    Attention
    Cette fonction est EXPERIMENTALE. Le comportement de cette fonction, son nom et la documentation environnante peuvent changer sans préavis dans une future version de PHP. Cette fonction doit être utilisée à vos risques et périls.

    Attention
    Tous les pilotes PDO ne prennent pas en charge PDOStatement :: getColumnMeta ().

    Je vais donc rester soit avec la fonction vu dans un des commentaires ici http://php.net/manual/fr/mysqli-result.fetch-fields.php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function h_type2txt($type_id)
    {
    	static $types;
     
    	if (!isset($types))
    	{
    		$types = array();
    		$constants = get_defined_constants(true);
    		foreach ($constants['mysqli'] as $c => $n) if (preg_match('/^MYSQLI_TYPE_(.*)/', $c, $m)) $types[$n] = $m[1];
    	}
     
    	return array_key_exists($type_id, $types)? $types[$type_id] : NULL;
    }
    que j'ai copié sans trop l'analyser étant très mauvais pour lire les expressions régulières.
    Soit faire un tableau de correspondance et une fonction perso qui "cast" le type et retourne une valeur plus proche de la structure de ma table.

    Pour l'instant la fonction est correcte, je verrais ensuite si ça fonctionne sur la bdd, car c'est dans le but de créer une requête SELECT par formulaire et selon le type.
    ex selon le type int => une zone de texte pour entrer une valeur numérique ou une plage de valeur, un type text => juste une case à cocher,...

  6. #6
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 238
    Par défaut
    en fait oui getColumnMeta() fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $select = $DB->query('SELECT * FROM fruit');//SELECT (*) FROM fruit
    $meta = $select->getColumnMeta(0);
    var_dump($meta);
    je dois juste enlever les parenthèses.

    Après j'ai regardé et utilisé le code du commentaire d'après en l'adaptant biensur à ma table :
    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
     
    $pdo_stmt = $dbh->execute('SELECT discussion.id, discussion.text, comment.id, comment.text FROM discussions LEFT JOIN comments ON comment.discussion_id = discussion.id');
     
    foreach(range(0, $pdo_stmt->columnCount() - 1) as $column_index)
    {
      $meta[] = $pdo_stmt->getColumnMeta($column_index);
    }
     
    while($row = $pdo_stmt->fetch(PDO::FETCH_NUM))
    {
      foreach($row as $column_index => $column_value)
      {
        //do something with the data, using the ids to establish the discussion.has_many(comments) relationship.
      }
    }
    Mais j'ai encore du mal à comprendre son fonctionnement pour obtenir ce que je veux : la structure de la table et le nom du type de chaque colonne.

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

Discussions similaires

  1. convertir un type octet-string
    Par Cedrci35 dans le forum WinDev
    Réponses: 6
    Dernier message: 24/03/2010, 09h43
  2. Convertir un type String en Integer VB-A
    Par sebeni dans le forum Général VBA
    Réponses: 1
    Dernier message: 09/05/2007, 16h18
  3. convertir un type null en string (re)
    Par pierrot67 dans le forum Bases de données
    Réponses: 8
    Dernier message: 01/01/2007, 19h27
  4. Réponses: 10
    Dernier message: 04/05/2006, 23h55
  5. [LG]Convertir le type double en string
    Par @tom@ dans le forum Langage
    Réponses: 8
    Dernier message: 18/01/2004, 19h20

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