[RESOLU] Récupérer une colonne de la base de données avec GetCol()

Eléphanteau du PHP | 31 Messages

24 juil. 2013, 10:11

Bonjour,

Je souhaiterai récupérer les colonnes de ma base de données dans des tableaux respectifs, exemple:
Dans ma base de données j ai une colonne "Year" et une colonne "Country" je souhaiterai donc avoir, deux tableaux:
Col_Year[] : contenant toutes les lignes de la base de données avec l'année correspondant à ces commandes (une commande par ligne)
Col_Country[] : contenant toutes les lignes de la base de données avec le pays correspondant à ces commandes (une commande par ligne)

Pour cela en surfant sur internet j ai trouvé la fonction php GetCol, qui permet normalement de justement récupérer une colonne d'une DB ...
Cependant je n'arrive pas à l'utiliser, ça ne marche pas [bawling]

Donc j espere que vous pourrez m'aider

Voici mon code:


Javascript:
[javascript]
function ajax_call2(what2do, callback){
$.ajax({
type: "GET",
async: false,
dataType: "json",
url: "data.php?" + what2do,
success: function(json) {
callback(json);
}
});
};

var Col_BPname = new Array();
var Col_Country = new Array();
var Col_Net_EURO = new Array();
var Col_Month = new Array();
var Col_Quarter = new Array();
var Col_Year = new Array();
var Col_Regions = new Array();
var Col_Offer_type = new Array();
var Col_Releas_OXE = new Array();
var Col_Users_with_sip = new Array();
var Col_Additionnal_users_OF_1 = new Array();

function GetDataBase() {
var tab_nomColonne = ["BP_name", "Country", "Net_EURO", "Segment", "Month", "Quarter", "Year", "Regions", "Offer_type", "Releas_OXE", "Users_with_sip", "Additionnal_users_OF_1"];
for(var j=0;j<tab_nomColonne.length;j++){
url = "colonne=" + tab_nomColonne[j];
ajax_call2(url, function(json){
window["Col_" + tab_nomColonne[j].toString()] = json['lacolonne'];
});
}

}
[/javascript]
tab_nomColonne, contient donc la liste de toutes mes colonnes


php
$resultat = array();

function DataBase($colonne) {

try{
	$db = new PDO('mysql:host=localhost;dbname=actis', 'root', '');
}
catch (Exception $e){
	die('Erreur : ' . $e->getMessage());
}
$data = array();
$data =& $db->getCol('SELECT '.$colonne.' FROM `actis_table`', $colonne);

return $data;
}

if (isset($_GET["colonne"])){
$colonne = $_GET["colonne"];
$resultat['lacolonne'] = DataBase ($colonne);		
}

print json_encode($resultat);


Je pense que je n'arrive pas a bien utiliser la méthode GetCol, mais je ne trouve pas beaucoup d exemples pour m'aider sur internet, c'est pourquoi je viens vers vous en espérant que vous pourrez m'éclairer=)

j'ai découvert cette méthode ici:
http://pear.php.net/manual/fr/package.d ... getcol.php



Geoffrey

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

24 juil. 2013, 19:59

salut,

getCol n'est une méthode de PDO donc cela ne peux pas fonctionner.

l'exemple que tu indique utilise une classe pear qui s'appel DB. (cette classe est remplacée par une autre dans pear, comme l'indique la doc, et il est préférable d'utiliser PDO au moins tu es, normalement, certain de l'avoir vu que c'est "natif").


Je t'invite à modifier ton niveau de rapport d'erreur à E_ALL et à afficher les erreurs, sans cela tu ne peux as développez correctement.

Tu peux faire la même chose avec la méthode fetchAll de la classe PDOStatement, avec le paramètre PDO::FETCH_COLUMN.


@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 31 Messages

24 juil. 2013, 23:44

Merci de ta réponse !

J'ai modifié mon code:
function DataBase($colonne) {
try{
	$db = new PDO('mysql:host=localhost;dbname=actis', 'root', '');
}
catch (Exception $e){
	die('Erreur : ' . $e->getMessage());
}
$data = array();
$row = array();
$sth = $db->query('SELECT DISTINCT '.$colonne.' FROM `actis_table`');
while ($row= $sth->fetchAll(PDO::FETCH_NUM)) {
	$data[] = $row[0];
}
var_dump($data);			
return $data;
}

Malheureusement ca ne marche toujours pas bien que ca marche bien qu'avant, j'obtiens ceci du var_dum (apres avoir fait un exemple d'appel de fonction simple: DataBase("Year"); )
array
  0 => 
    array
      0 => string '2011' (length=4)
 
[]
Je souhaiterai avoir la liste de toutes les années présentes dans la colonne, a l etat d origine quoi ... comme ca:

data[0] = 2011
data[1] = 2012
data[2] = 2011
...
data[1000]= 2011 .... ?



Mais la comme on peut le voir juste le premier emplacement est apparemment rempli :'(



Geoffrey

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

25 juil. 2013, 09:28

je ne t'ai pas indiqué un fetch num mais PDO::FETCH_COLUMN....
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 31 Messages

25 juil. 2013, 09:42

Oui c'est vrai bon donc j'ai essayé comme ca avec le PDO::FETCH_COLUMN
function DataBase($colonne) {
	try {
		$db = new PDO('mysql:host=localhost;dbname=actis', 'root', '');
	}
	catch (Exception $e){
		die('Erreur : ' . $e->getMessage());
	}

	$sth = $db->query('SELECT DISTINCT ' . $db->quote($colonne) . ' FROM `actis_table`');
	return $sth->fetchAll(PDO::FETCH_COLUMN);
}

var_dump (DataBase("Year"));
en testant directement mon php en ouvrant la page:
http://localhost/Actis_Analytics/data.php

Et avec le var_dump j'obtiens ceci :

Code : Tout sélectionner

array 0 => string 'Year' (length=4) []
:(

Donc je ne sais pas quoi en penser ^^

Geoffrey

Eléphanteau du PHP | 31 Messages

25 juil. 2013, 10:30

C'était bien avec fetchAll(PDO::FETCH_COLUMN) !


j'ai cherché sur internet a propos de fetchAll(PDO::FETCH_COLUMN)

Et finalement j'ai apparemment trouvé la solution:

Code : Tout sélectionner

var_dump(DataBase("Country")); function DataBase($colonne) { try{ $db = new PDO('mysql:host=localhost;dbname=actis', 'root', ''); } catch (Exception $e){ die('Erreur : ' . $e->getMessage()); } $data = array(); $sth = $db->prepare('SELECT '.$colonne.' FROM `actis_table`'); $sth->execute(); $data = $sth->fetchAll(PDO::FETCH_COLUMN, 0); return $data; }
le var_dump donne:

Code : Tout sélectionner

array 0 => string 'Germany' (length=7) 1 => string 'Norway' (length=6) 2 => string 'France' (length=6) 3 => string 'France' (length=6) 4 => string 'France' (length=6) 5 => string 'Martinique' (length=10) 6 => string 'Martinique' (length=10) 7 => string 'Germany' (length=7) 8 => string 'Germany' (length=7) 9 => string 'Germany' (length=7) 10 => string 'Germany' (length=7) 11 => string 'Germany' (length=7) 12 => string 'Germany' (length=7) 13 => string 'Germany' (length=7) 14 => string 'Spain' (length=5) 15 => string 'France' (length=6) 16 => string 'France' (length=6) 17 => string 'France' (length=6) 18 => string 'France' (length=6) 19 => string 'France' (length=6) 20 => string 'France' (length=6) 21 => string 'Belgium' (length=7) 22 => string 'Belgium' (length=7) 23 => string 'Portugal' (length=8) 24 => string 'Portugal' (length=8) 25 => string 'Portugal' (length=8) 26 => string 'Portugal' (length=8) 27 => string 'Switzerland' (length=11) 28 => string 'Switzerland' (length=11) 29 => string 'Italy' (length=5) 30 => string 'Italy' (length=5) 31 => string 'France' (length=6) 32 => string 'Spain' (length=5) 33 => string 'Spain' (length=5) 34 => string 'Spain' (length=5) 35 => string 'Spain' (length=5) 36 => string 'Spain' (length=5) 37 => string 'Spain' (length=5) 38 => string 'Spain' (length=5) 39 => string 'Spain' (length=5) 40 => string 'Spain' (length=5) 41 => string 'France' (length=6) 42 => string 'Italy' (length=5) 43 => string 'Italy' (length=5) 44 => string 'France' (length=6) 45 => string 'France' (length=6) 46 => string 'France' (length=6) 47 => string 'Austria' (length=7) 48 => string 'Germany' (length=7) 49 => string 'Germany' (length=7) 50 => string 'Germany' (length=7) 51 => string 'Germany' (length=7) 52 => string 'France' (length=6) 53 => string 'France' (length=6) 54 => string 'Italy' (length=5) 55 => string 'Italy' (length=5) 56 => string 'Italy' (length=5) 57 => string 'Italy' (length=5) 58 => string 'Portugal' (length=8) 59 => string 'Belgium' (length=7) 60 => string 'Germany' (length=7) 61 => string 'Italy' (length=5) 62 => string 'Ivory Coast' (length=11) 63 => string 'Panama' (length=6) 64 => string 'France' (length=6) 65 => string 'France' (length=6) 66 => string 'France' (length=6) 67 => string 'France' (length=6) 68 => string 'France' (length=6) 69 => string 'France' (length=6) 70 => string 'Germany' (length=7) 71 => string 'France' (length=6) 72 => string 'France' (length=6) 73 => string 'France' (length=6) 74 => string 'France' (length=6) 75 => string 'France' (length=6) 76 => string 'France' (length=6) 77 => string 'France' (length=6) 78 => string 'France' (length=6) 79 => string 'France' (length=6) 80 => string 'France' (length=6) 81 => string 'France' (length=6) 82 => string 'France' (length=6) 83 => string 'France' (length=6) 84 => string 'Germany' (length=7) 85 => string 'Netherlands' (length=11) 86 => string 'Spain' (length=5) 87 => string 'Spain' (length=5) 88 => string 'France' (length=6) 89 => string 'France' (length=6) 90 => string 'France' (length=6) 91 => string 'France' (length=6) 92 => string 'Austria' (length=7) 93 => string 'Austria' (length=7) 94 => string 'Austria' (length=7) 95 => string 'Austria' (length=7) 96 => string 'Austria' (length=7) 97 => string 'Germany' (length=7) 98 => string 'Germany' (length=7) 99 => string 'Germany' (length=7) 100 => string 'Germany' (length=7) 101 => string 'Germany' (length=7) 102 => string 'Germany' (length=7) 103 => string 'Germany' (length=7) 104 => string 'Germany' (length=7) 105 => string 'Spain' (length=5) 106 => string 'Spain' (length=5) 107 => string 'France' (length=6) 108 => string 'France' (length=6) 109 => string 'France' (length=6) 110 => string 'France' (length=6) 111 => string 'France' (length=6) 112 => string 'France' (length=6) 113 => string 'France' (length=6) 114 => string 'France' (length=6) 115 => string 'France' (length=6) 116 => string 'France' (length=6) 117 => string 'France' (length=6) 118 => string 'France' (length=6) 119 => string 'France' (length=6) 120 => string 'France' (length=6) 121 => string 'France' (length=6) 122 => string 'France' (length=6) 123 => string 'France' (length=6) 124 => string 'Italy' (length=5) 125 => string 'Italy' (length=5) 126 => string 'Italy' (length=5) 127 => string 'Poland' (length=6) more elements...
Exactement ce que je voulais quoi :O !

MERCI beaucoup pour ton aide parce que moi au départ j'étais parti avec mon GetCol .... -_-

Geoffrey

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

25 juil. 2013, 19:17

C'est exactement l'exemple de la doc ;)

@+
Il en faut peu pour être heureux ......