7
votes

Sélectionnez sur la table vide mais obtenez toujours des noms de colonne

Je veux faire une sélection sur une table vide, mais je veux toujours récupérer un seul record avec tous les noms de colonne. Je sais qu'il existe d'autres moyens d'obtenir les noms de colonne d'une table, mais je veux savoir s'il est possible avec une sorte de requête SELECT.

Je sais que celui-ci fonctionne lorsque je l'exécute directement dans MySQL: P> XXX PRE>

Mais j'utilise php + PDO (fetch_class). Cela me donne simplement un objet vide à la place d'une ligne avec tous les noms de colonne (avec des valeurs vides). Donc, pour une raison quelconque de la requête ne fonctionne pas avec PDO FETCH_CLASS. P>

$stmt = $this->db->prepare ( $sql );
$stmt->execute ( $bindings );
$result = $stmt->fetchAll ( \PDO::FETCH_CLASS, $class );
print_r($result); // Empty object... I need an object with column names


0 commentaires

9 Réponses :


0
votes

Même sans PDO dans le chemin, la base de données ne retourne pas la structure sans au moins une ligne. Vous pouvez le faire et ignorer la ligne de données: xxx

ou vous pouvez simplement xxx

et traiter avec une ligne par champ.

où 1 = 0 ne fonctionne pas pour moi. Il retourne toujours jeu vide .


0 commentaires

2
votes

Vous pouvez essayer:

SELECT * FROM information_schema.columns
WHERE table_name = "cf_pagetree_elements"


0 commentaires

-1
votes

Vous pouvez utiliser des métadonnées avec; xxx


0 commentaires

3
votes
SELECT column_name FROM information_schema.columns WHERE table_name='cf_pagetree_elements';

0 commentaires

6
votes

Aux autres réponses qui ont affiché des colonnes d'affichage et du schéma d'informations. L'OP a clairement dit: " Je sais qu'il existe d'autres moyens d'obtenir les noms de colonne d'une table forte>, mais je veux savoir s'il est possible avec une sorte de requête sélectionnée."

apprendre à lire . P>


Quoi qu'il en soit, pour répondre à votre question; Non tu ne peux pas. Vous ne pouvez pas sélectionner une ligne à partir d'une table vide. Pas même une ligne avec des valeurs vides, à partir d'une table vide. P>

Il y a cependant une astuce que vous pouvez appliquer pour faire cela. P>

Créer une table supplémentaire appelée "mannequin" avec juste un Colonne et une ligne dedans: P>

Table: strong> DMMY P>

SELECT * FROM dummy LEFT OUTER JOIN your_table ON 1=1


1 commentaires

Vous pouvez réellement obtenir des noms de colonnes d'une requête vide avec / PDO. Utilisez la fonction Get Colonne Meta



1
votes

Ceci indiquera les colonnes de toute requête pour les pilotes PDO prenant en charge GetColummetta. J'utilise cela avec SQL Server et fonctionne bien, même sur des requêtes très complexes avec des tables, des sous-demandes et des syndicats aliasés. Me donne des colonnes même lorsque les résultats sont zéro xxx


0 commentaires

9
votes

Ajout de ce que a répondu , il y a une solution qui n'a même pas besoin d'une table factice xxx

dans mysql Vous pouvez modifier où 1 = 1 à juste où 1


3 commentaires

mieux ajouter la limite 1 - Comme ce tableau peut être rempli un jour


@YourCommermonse une bonne idée. Fait


C'est la réponse. La réponse sélectionnée nécessite des privilèges de créer une table. Il y a de bonnes chances que la raison de ne pas avoir besoin de déterminer les noms de colonne avec sélection est parce que les privilèges restreignent l'un de le faire d'une autre manière.



0
votes

Le dernier PDO pour SQLSVR fonctionne définitivement avec la colonne Meta.

Définissez simplement votre déclaration et utilisez-la pour obtenir un tableau d'informations utiles: P>

$stmt->execute();
$meta= array();
foreach(range(0, $stmt->columnCount() - 1) as $column_index)
   {
    array_push($meta,$stmt->getColumnMeta($column_index));
   }


0 commentaires

0
votes

solution complète pour Oracle ou MySQL

pour toutes les colonnes ou certaines colonnes (mon objectif est d'obtenir des colonnes arbitraires exactement telles qu'elles sont en DB, quelle que soit la case)

pour toute table (W / W / o lignes) xxx


0 commentaires