merci beaucoup pour la réponse,
mais mince, ça n'est toujours pas clair pour moi...
FETCHCOLONNE renvoie les données d'une seule colonne, par défaut la 1ere, donc c'est plutôt pas très pratique sauf si on ne sélectionne qu'une colonne...
Après avoir exécuté (EXECUTE/QUERY) la requête il faut récupérer les lignes, en anglais les FETCH.
Mais vous pouvez utiliser les méthodes FETCH/FETCHALL pour récupérer plus classiquement la valeur.
Dans l'exemple la requête renvoie 1 ligne de 1 colonne, le développeur a probablement trouvé plus rapide de coder avec FETCHCOLONNE.
ok ça m'éclaircit déjà beaucoup, merci.
Mais dans ce cas le test d'existence n'est pas suivi d'un ajout en base, tel que le code est proposé, ça n'a aucune utilité...
Je n'arrive pas bien à te suivre.
Si le personnage existe déjà on ne l'ajoute pas, sinon, on l'ajoute dans la base. Ça à l'air bon non ? Peut-être que quelque chose m'échappe...
Si c'est le cas, je pense qu'il faut prendre en considération que c'est un tutoriel, peut-être que l'auteur choisit de présenter des cas juste pour l'exemple, et que le code n'a pas une finalité en soi.
En tous cas je patauge toujours
php objet c'est nouveau pour moi, et donc les "managers" aussi.
Je vais dire ce que je pense avoir compris, je vais probablement dire des bêtises, mais je pense que ça va vous permettre de comprendre où je bloque...
return (bool) $this->_db->query('SELECT COUNT(*) FROM personnages WHERE id = '.$info)->fetchColumn();
1) ici, "$this" représente un manager,
2) la requête récupère le nombre de lignes qu'il y a d'id "$info" dans la table (c'est Français ça..?). Donc j'imagine que la requête récupère la valeur 1 ou 0.
Je ne comprends pas pourquoi on utilise un fetchColumn à la fin parce-que si fetchColumn renvoi la ligne d'une colonne (quelle ligne d'ailleurs ? la dernière ?) alors pourquoi l'appliquer à un "int" ?
en vérité j'ai même du mal à traduire cette ligne de code en Français :
$this->_db->query('SELECT COUNT(*) FROM personnages WHERE id = '.$info)->fetchColumn();
Traduction...
le manager utilise son attribut (qui est une instance de PDO) qui va envoyer une requête qui compte le nombre de personnages qui on l'id "$info" (0 ou 1 donc)
et à la fin, fetchColumn s'applique à la reqête,
c'est query('SELECT COUNT(*) FROM personnages WHERE id = '.$info) qui appel la fonction "fetchColumn()"
...fin traduction.
j'ai essayé d'enlever "->fetchcolumn" à la fin,
évidement ça ne marche plus,
mais je ne comprends toujours pas pourquoi...
Partager