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> 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
9 Réponses :
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: ou vous pouvez simplement p> et traiter avec une ligne par champ. p> où 1 = 0 code> ne fonctionne pas pour moi. Il retourne toujours
jeu vide code>. P> p>
Vous pouvez essayer:
SELECT * FROM information_schema.columns WHERE table_name = "cf_pagetree_elements"
Vous pouvez utiliser des métadonnées avec;
SELECT column_name FROM information_schema.columns WHERE table_name='cf_pagetree_elements';
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
Vous pouvez réellement obtenir des noms de colonnes d'une requête vide avec / PDO. Utilisez la fonction Get Colonne Meta
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
Ajout de ce que a répondu , il y a une solution qui n'a même pas besoin d'une table factice dans mysql Vous pouvez modifier où 1 = 1 code> à juste
où 1 code> p> p> p> p> p> P> P> P>
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.
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)); }
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) p>
pour toute table (W / W / o lignes) p>