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

  1. #1
    Membre régulier
    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
    Points : 95
    Points
    95
    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
    Points : 44 155
    Points
    44 155
    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 régulier
    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
    Points : 95
    Points
    95
    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
    Points : 44 155
    Points
    44 155
    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 régulier
    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
    Points : 95
    Points
    95
    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 régulier
    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
    Points : 95
    Points
    95
    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.

  7. #7
    Membre régulier
    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
    Points : 95
    Points
    95
    Par défaut
    Apparemment il y'a plus simple ici : http://php.net/manual/fr/function.mysql-list-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
    15
     
    	//
    	$DB='maBase';
    	$table='maTable';
    	//
    	$result = mysql_query($DB,"SHOW COLUMNS FROM ".$table);
    	if (!$result) {
    		echo 'Impossible d\'exécuter la requête : ' . mysql_error();
    		exit;
    	}
    	if (mysql_num_rows($result) > 0) {
    		while ($row = mysql_fetch_assoc($result)) {
    			print_r($row);
    		}
    	}
    Sauf que ça ne passe pas je dois faire une petit erreur avec la syntaxe de mysql_query() et $table


    modif message : en fait j'ai compris
    mysql_connect, mysql_query,mysql_error(), mysql_num_rows, mysql_fetch_assoc sont déprécié depuis php 5.4 et j'utilise la version 5.6


    Donc je me balade dans tout le site depuis : http://php.net/manual/fr/function.mysql-list-fields.php, pour reconstruire le bout de code ci dessus avec :
    mysqli_connect, mysqli_query, mysqli_connect_error() et mysqli_error(), mysqli_num_rows, mysqli_fetch_assoc.
    Ce bout de code répond exactement à ce que je veux récupérer et il est assez simple.

    Mais j'ai souvent à chaque fois des warning à chaque tentative de recodage avec les nouvelles fonctions depuis la 5.4.
    Je posterais le code que j'ai tenté au mieux pour éviter le plus possible ces warning, si vous pouviez me donner un coup de main à ce moment là si je continue à avoir des warning !

  8. #8
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Suite à l'obsolescence de l'API mysql, on remplace souvent par l'API Mysqli (en d'autres termes, là on utilisait les fonctions mysql_xxxx, on utilise les fonctions mysqli_xxxx). Sauf qu'il n'y a pas forcément un équivalent à chaque fonction.
    Typiquement, mysql_list_fields n'a pas d'équivalent direct, et il faut donc passer par la requête SHOW COLUMNS FROM <table>.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  9. #9
    Membre régulier
    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
    Points : 95
    Points
    95
    Par défaut
    Je n'ai pas mis résolu alors que j'ai ce que je veux depuis quelques jours.
    Mais j'ai l'intention de mettre le code en entier avec le formulaire. Et j'ai encore à finir mon formulaire (html,css, php :mettre sous forme de fonctions un peu tout ce que j'ai vu pour plus de lisibilité ) pour faire soit des listbox si c'est du texte ou des plages ou juste un champ pour un nombre, etc...

    J'aimerais aussi connaitre vos avis sur les différences, sur vos préférences, sur la sécurité et la portabilité entre PDO et MSQL_xxx
    Merci d'avance

    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
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    <?php 
     
    function readBddAllField() {
     
    	$host		=["localhost","127.0.0.1","127.0.0.1:3307",NULL];
    	$user		="root";
    	$password	="";
    	$database	="test2";
     
    	/*Connection avec la BDD.*/
    	// on se connect à localhost 
    	// on se connect à localhost au port 3307
    	// on se connecte à MySQL et on sélectionne la base
     
    	//mysqli_connect($host,$user,$password,$database);
      	  $link = mysqli_connect($host[0], $user, $password,$database)
              or die("Impossible de se connecter : " . mysqli_error($link));
     
    	  //else
    	  // Si tout va bien, on peut continuer
    	  echo 'Connexion réussie';
     
     
    	/*Connection avec la TABLE et REQUETE.*/
    	$table		="maTable";
     
     
    	/* Si nous avons à récupérer beaucoup de données, nous utilisons MYSQLI_USE_RESULT */
    	/* Récupère les informations d'un champ pour toutes les colonnes */
     
    	$result = mysqli_query($link,"SHOW COLUMNS FROM $table",MYSQLI_STORE_RESULT );
    	//MYSQLI_USE_RESULT ; MYSQLI_STORE_RESULT ;  MYSQLI_ASYNC 
     
    	 /* 
    	 * Notez que nous ne pouvons exécuter aucune fonction qui agit sur le serveur tant que
    	 * le jeu de résultats n'est pas clos. Tous les appels retourneront un 'out of sync'
     	 */
     
    	if (!mysqli_query($link, "SET @a:='this will not work'") || !$result) {
    		echo 'Impossible d\'exécuter la requête : ' . mysqli_error();
    		printf("Erreur : %s\n", mysqli_error($link));
    		return 0;
    	}
     
    	echo mysqli_num_rows($result);
     
    	if (mysqli_num_rows($result) > 0) {
    	   while ($row = mysqli_fetch_assoc($result)) {
     
    	      print_r('<p>Field:	'.$row['Field'].';Type:	'.$row['Type'].'</p>');
    	      print_r('<br>');
     
    	   }
    	}
     
            /* Libération du jeu de résultats */
    	mysqli_free_result($result);
     
     
    	/* Fermeture de la connexion */
    	mysqli_close($link);
     
    }
     
    ?>

  10. #10
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Ma préférence va à PDO sans discussion : c'est plus simple d'usage que mysqli (le bind_param de mysqli me donne mal à la tête) et ça a l'avantage de pouvoir fonctionner avec d'autres SGDB que MySQL (sous réserve des pilotes disponibles) : j'ai déjà travaillé sur une application avec une base Oracle et c'est quasiment transparent (faut juste se rappeler de ne pas utiliser des fonctions spécifiques à MySQL dans les requêtes)

    Pour moi, l'API mysqli est préférable dans un seul cas : si on a un code existant qui utilise l'API Mysql obsolète et qu'on veut la remplacer sans trop de modifications. ça marche aussi pour essayer des scripts ou des tutos un peu vieux qui utilisent l'ancienne API. Dans ce cas, et dans ce cas uniquement, utiliser l'API mysqli est un intérêt.
    Mais ça c'est juste mon avis.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  11. #11
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Celira Voir le message
    Ma préférence va à PDO sans discussion : c'est plus simple d'usage que mysqli (le bind_param de mysqli me donne mal à la tête) et ça a l'avantage de pouvoir fonctionner avec d'autres SGDB que MySQL (sous réserve des pilotes disponibles) : j'ai déjà travaillé sur une application avec une base Oracle et c'est quasiment transparent (faut juste se rappeler de ne pas utiliser des fonctions spécifiques à MySQL dans les requêtes)

    Pour moi, l'API mysqli est préférable dans un seul cas : si on a un code existant qui utilise l'API Mysql obsolète et qu'on veut la remplacer sans trop de modifications. ça marche aussi pour essayer des scripts ou des tutos un peu vieux qui utilisent l'ancienne API. Dans ce cas, et dans ce cas uniquement, utiliser l'API mysqli est un intérêt.
    Mais ça c'est juste mon avis.
    Pas mieux, je rajouterais même que écosystème PHP moderne est orienté objet et que PDO s'inscrit dans cette démarche. J'ignore ce que tu souhaites faire avec PHP a moyen terme, sache que la plupart des outils comme les frameworks et CMS utilisent du code orienté objet, 99% (pour ne pas dire 100%) des jobs en PHP nécessitent de savoir coder en orienté objet. Du coup quitte a maîtriser quelque chose autant aller dans le sens de la marche, et si tu n'es pas confortable avec l'orienté objet c'est un moyen simple pour faire ses premières gammes.

    Bref, PDO, c'est tout bénef !

  12. #12
    Membre régulier
    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
    Points : 95
    Points
    95
    Par défaut
    oui effectivement jusqu'à que je poste mon sujet j'ai toujours cru que PHP était uniquement procédural.
    Or depuis la 5.4 et ça a beaucoup évolué vers la POO. D'ailleurs pour mysql et msysqli il propose toujours du code soit orienté objet soit orienté procédural.

    Je suis toujours à examiner les différentes façon et les différentes fonctions des deux cotés.
    Résultat mon formulaire de requête en ligne ne se met pas en place, voulant maitriser un peu plutôt que bidouiller mon formulaire.

    Mais je mettrais résolu laissant d'autres parler un peu de leur appréciation sur PDO ou mysql.

    J'aurais d'ailleurs une remarque de néophyte : y'a t-il qu'un pas au vu des sites avec php que php orienté objet concurrence java ?

  13. #13
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    "PHP vs Java" sur les applications web est un grand débat, voire un appeau à troll. Du coup, je ne vais pas me lancer sur le sujet, mais juste dire que ce n'est pas parce qu'un langage permet de faire de la POO qu'on peut tout faire avec. Il ya toujours des choses que je coderai plus volontiers en PHP et d'autres en Java (surtout on prend en compte les frameworks, libraries, moteurs de templates et autres joyeusetés)

    Et au passage, on peut faire de la POO en PHP depuis PHP 5.0 (ce qui fait quelque chose comme 12 ans) et les namespaces existent depuis 5.3 (soit 7 ans). Bienvenue dans le PHP moderne
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  14. #14
    Membre régulier
    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
    Points : 95
    Points
    95
    Par défaut
    Citation Envoyé par Celira Voir le message
    "

    Et au passage, on peut faire de la POO en PHP depuis PHP 5.0 (ce qui fait quelque chose comme 12 ans) et les namespaces existent depuis 5.3 (soit 7 ans). Bienvenue dans le PHP moderne
    Je me sens vieux d'un coup c'est pas gentil !


  15. #15
    Membre régulier
    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
    Points : 95
    Points
    95
    Par défaut
    J'aimerais connaitre l'équivalent de getColumnMeta en msysqli_...

    Code PDO:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $recordsetPDO = $linkPDO->prepare("SELECT * from $table");
            $recordsetPDO->execute();
            /**/
            foreach(range(0, $recordsetPDO->columnCount() - 1) as $column_index)
            {             
                $meta[] = $recordsetPDO->getColumnMeta($column_index);
            }     
            echo "<pre>"; var_dump($meta[0]);             echo "</pre>";
    Code MYSQLi :
    Comme vous pouvez le voir j'ai un peu tout essayé, et mysqli_fetch_fields semble le plus adapté à ce que je veux mais cela ne me donne pas les mêmes infos et chaque façon me donne plus de détails d'un coté et moins de l'autre.
    Ex : sur le "flag" ou "native type" getColumnMeta me donne plus d'infos

    Mais je n'ai pas trouvé comment extraire le "name" selon les valeurs numériques parmi les constantes https://secure.php.net/manual/fr/mysqli.constants.php
    Je n'ai trouvé que constant() mais il faut un "string".
    Il y a peut-être get_object_vars mais $meta[]->flags mais ce n'est plus un objet !
    Bref j'ai un peu tout essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $meta[]     = $row [$column_index];
    $metaObject[]   = get_object_vars($row [$column_index]);
    $metaClass[]    = $row [$column_index]->getConstants();

    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
     
    if ($recordsetSQL = mysqli_query($linkSQL, "SELECT * FROM $table", MYSQLI_STORE_RESULT)) { 
                /* Notez que nous ne pouvons exécuter aucune fonction qui agit sur le serveur tant que
                 le jeu de résultats n'est pas clos. Tous les appels retourneront un 'out of sync'
                 */
                if (!mysqli_query($linkSQL, "SET @a:='this will not work'")) {
                    printf("Erreur : %s\n", mysqli_error($linkSQL));
                }
            }
     
            /* Tableau associatif et numérique */
            //$row = mysqli_fetch_all($recordsetSQL, MYSQLI_BOTH);
            //$row = mysqli_fetch_array($recordsetSQL, MYSQLI_BOTH);
     
            $row = mysqli_fetch_fields($recordsetSQL);
     
            /**/
            foreach(range(0,mysqli_num_fields($recordsetSQL) - 1) as $column_index)
            {              
                $meta[]     = $row [$column_index];
                $metaObject[]   = get_object_vars($row [$column_index]);
                $metaClass[]    = $row [$column_index]->getConstants();
            }         
            echo "<pre>"; var_dump($meta[0]);             echo "</pre>";
    Certes je peux faire un tableau de constante perso mais php propose déjà un ensemble de constantes https://secure.php.net/manual/fr/mysqli.constants.php, comment les récupérer plus simplement ?

    Merci à vous de m'aider pour avoir avec MYSQLi les mêmes infos qu'avec PDO et getColumnMeta afin d'avoir quelque chose de complet des deux façons de faire.

  16. #16
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Je ne vois pas ce que tu veux dire par "récupérer les constantes". Tu peux utiliser les constantes prédéfinies directement dans ton code. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    switch ($typeField) {
    case MYSQLI_TYPE_FLOAT :
      echo "champ nombre";
      break;
    case MYSQLI_TYPE_TIMESTAMP :
      echo "champ timestamp";
      break;
    default:
      echo "mais c'est quoi ce champ ?";
    }
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  17. #17
    Membre régulier
    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
    Points : 95
    Points
    95
    Par défaut
    en me basant sur un des commentaires déjà vu :
    http://php.net/manual/fr/mysqli-result.fetch-fields.php
    mais j'espérais plus simple comme getColumnMeta en PDO
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $type=$meta[0]->type;
    $flags=$meta[0]->flags;
     
    		echo "<pre>";	var_dump($meta[0]);				echo "</pre>";
    		echo "<pre>";	print (h_type2txt($type));				echo "</pre>";
    		echo "<pre>";	print (h_flags2txt($flags));				echo "</pre>";
    après je vais faire un array comme pour le flag de getColumnMeta mais n'étant pas très doué pour lire les expressions régulières je laisse le code comme ça pour l'instant
    mais sinon j'ai tout ce dont j'ai besoin pour fabriquer mon formulaire sql-php en ligne

    je marque résolu mais je posterais le formulaire plus tard par petite fierté personnelle

+ 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