Pour ce deuxième tutoriel, vous devez avoir installé CodeIgniter sur votre serveur et pouvoir y accéder à l’aide de votre navigateur. Vous devez aussi avoir, mais ce n’est pas essentiel, la réécriture d’URL activée.
Dans cette deuxième partie nous allons voir comment connecter une base de données à CodeIgniter. Ce framework possède plusieurs drivers (mysqli, postgre, odbc, mysql, sqlite, oci8) permettant de simplement configurer une base de données.
Toute la configuration de la BDD dans CodeIgniter se trouve dans le fichier de configuration /application/config/database.php
Ce fichier est comme vous pouvez le constater très bien documenté. Il va nous permettre non seulement d’utiliser Active Record, mais aussi de stocker toutes les informations nécessaires pour se connecter à notre BDD. Nous n’aurons plus besoin de spécifier à chaque fois que nous voulons accéder à une table les paramètres de connexion.
Voyons tout de suite les paramètres de ce fichier :
['hostname'] Le serveur de votre base données (en général localhost) ['username'] L'identifiant utilisé pour se connecter à la base de données ['password'] Ainsi que le password utilisé ['database'] Le nom de la base de données ['dbdriver'] Le type de votre BDD : mysql, mysqli, postgre, odbc, mssql, sqlite, oci8 ['dbprefix'] Le préfixe utilisé (exemple ci_nomdelatable) ['pconnect'] TRUE/FALSE - Pour utiliser une connexion persistante ['db_debug'] TRUE/FALSE - Afficher ou non les erreurs ['cache_on'] TRUE/FALSE - Activer/désactiver le cache ['cachedir'] Le chemin d'accès où seront stockés les fichiers misent en cache ['char_set'] Le jeu de caractère utilisé pour communiquer avec la base de données ['dbcollat'] L'organisation de ce jeu de caractère pour communiquer avec la base de données
Nous devons maintenant connecter notre base de données à Code Igniter, pour celà rendez-vous dans le fichier application/config/database.php
Ce fichier, comme le fichier config.php que nous avons édité précédemment, contient beaucoup de commentaires. Ces commentaires sont aux normes de phpdocumentator, nous verrons dans les tutoriaux suivants comment en tirer partie. En attendant voici la partie que vous devez éditer (en supposant que vous ayiez une base de données de type MySQL) :
$db['default']['hostname'] = "localhost"; $db['default']['username'] = "root"; $db['default']['password'] = ""; $db['default']['database'] = "ci"; $db['default']['dbdriver'] = "mysql"; $db['default']['dbprefix'] = ""; $db['default']['pconnect'] = TRUE; $db['default']['db_debug'] = TRUE; $db['default']['cache_on'] = FALSE; $db['default']['cachedir'] = ""; $db['default']['char_set'] = "utf8"; $db['default']['dbcollat'] = "utf8_general_ci";
Il existe deux méthodes pour utiliser notre base de données : une manuelle et l’autre automatique.
La méthode manuelle s’oocupe de charger vos paramètres du fichier database.php
1
$this->load->database();
Chaque fois que vous voudrez utiliser la base de données, il faudra placer ce code.
La méthode automatique consiste à charger la librairie directement dans le fichier autoload.php. Cette méthode sera utilisée dans ce tutoriel ainsi que dans les suivants.
$autoload['libraries'] = array('database');
Le fichier autoload permet de charger une fois pour toute les composants dont nous aurons besoin. Avec cette méthode, une seule inclusion suffit. Nul besoin de préciser l’extension, ni même le répertoire, le framework se charge de tout celà pour vous. Dans le cas évoqué, CodeIgniter cherchera à charger un fichier database.php en regardant dans ces répertoires :
system/libraries system/application/libraries
Je ne vais pas vous décrire toute de suite comment fonctionne les models, views et controllers au sein de CodeIgniter mais afin de vous familiariser avec le framework nous allons voir quelques utilisations de la BDD à travers CI. Pour les morceaux de codes suivants, vous pouvez éditer directement le controlleur par défaut de l’installation de CI, se trouvant dans application>controllers>welcome.php
Enfin, avant de commencer nos tests nous allons créer une base de données “tut_pasunclou” à l’aide de la ligne de commande mysql. Vous pouvez sauter cette étape si vous disposez de phpMyAdmin ou de MySQL Administrator
$ mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 54 Server version: 5.0.67-0ubuntu6 (Ubuntu) Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> CREATE DATABASE tut_pasunclou; Query OK, 1 row affected (0.00 sec) mysql> USE tut_pasunclou Database changed mysql> exit Bye $
Nous avons donc une base de données, il ne nous faut maintenant créer une table et découvrir comment CodeIgniter permet de manipuler la base de données.
Voici le code SQL permettant de créer notre table (en ligne de commande et sous PhpMyAdmin il suffit de copier-coller ces lignes) et d’entrer quelques données.
CREATE TABLE Users ( idUsers INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, username VARCHAR(45) NOT NULL, PRIMARY KEY(idUsers) ); INSERT FROM Users (username) VALUES ("kevin"); INSERT FROM Users (username) VALUES ("toi"); INSERT FROM Users (username) VALUES ("moi");
Résumons ce que nous avons fait. Nous avons d’abord configurer notre BDD avec CodeIgniter, nous avons indiqué à CI de charger automatiquement la librairie permettant de correspondre avec la BDD, nous avons créer une base de données tut_pascunclou contenant une table Users avec 2 champs dont une clef primaire et enfin nous avons insérer 3 entrées.
Lorsque nous accédons à notre site local avec l’adresse http://tut.pasunclou nous accédons au controlleur défini par le fichier de configuration, c’est-à-dire, le controlleur welcome. Vous pouvez dans votre navigateur préciser explicitement le controlleur en tapant http://tut.pasunclou/welcome le résultat affiché sera le même. De plus, un controlleur possède des actions (qui sont des méthodes d’une classes), appeller un controlleur sans action revient à appeller l’action index par défaut, vous pouvez alors précisez à votre navigateur d’appeller http://tut.pasunclou/welcome/index
Nous pouvons maintenant faire la relation entre le nom du controlleur, ses méthodes (actions) et comment nous accédons à notre site. Pour ce tutoriel nous allons développer une nouvelle action nommé test, voici à quoi devrait ressembler votre fichier welcome.php situé dans system>application>controllers
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
<?php class Welcome extends Controller { function Welcome() { parent::Controller(); } function index() { $this->load->view('welcome_message'); } function test() { } }
Vous pouvez maintenant accèder à notre nouvelle action sous cette adresse http://tut.pasunclou/welcome/test et si tout se passe bien vous devriez apercevoir une page blanche. Si vous avez une page not found, vérifiez que vous avez paramétré un domaine fictif (essayez également d’accéder à votre application avec localhost), vérifiez également que vous avez correctement modifié le controlleur welcome et que vous n’avez pas modifié le controlleur par défaut.
Pour faire une requête sur notre base de donnée nous pouvons directement utilisé la méthode query de CodeIgniter, son avantage est que nous pouvons créer des requêtes compliquées et que nous exécutons directement du code SQL.
1 2 3 4 5 6 7 8 9 10
... function test() { $requete = $this->db->query("SELECT * FROM Users"); foreach ($query->result() as $resultat) { echo "ID : " $resultat->id " pseudo : " $resultat->pseudo "<br />"; } } }
Si vous voyez une erreur vous informant que la propriété Welcome::$db n’est pas définie alors vous n’avez pas chargé votre librarie database indiqué au début de ce tutoriel. Sinon vous devriez voir ceci :
ID : 1 pseudo : kevin ID : 2 pseudo : toi ID : 3 pseudo : moi
Dans notre morceau de code nous avons accéder aux paramétres de notre table User grâce à des objets et par l’intermédiaire de $query->result()
Pour changer ce comportement et avoir des tableaux remplacer-le par $query->result_array() et adapté votre code de la manière suivante :
1 2 3 4 5 6 7 8 9 10
... function test() { $requete = $this->db->query("SELECT * FROM Users"); foreach ($query->result_array() as $resultat) { echo "ID : " $resultat['id'] " pseudo : " $resultat->['pseudo'] "<br />"; } } }
Libre à vous de choisir la méthode qui vous convient le mieux. Cependant le défaut de ces méthodes est qu’elles impliques de connaître le langage SQL et peut poser des problèmes lors d’une migration de la BDD. Pour celà. CI à implanter le pattern Active Record permettant de créer des requêtes plus parlantes. Voyons tout de suite un équivalent de notre code :
1 2 3 4 5 6 7 8 9 10
... function test() { $requete = $this->db->get("Users"); foreach ($query->result_array() as $resultat) { echo "ID : " $resultat['id'] " pseudo : " $resultat->['pseudo'] "<br />"; } } }
Il est donc plus simple de retenir get(’nom de la table’) que l’équivalent SQL. À titre d’exemple regardons de plus près comment affiner nos requêtes et essayer de mettre en place l’équivalent en SQL suivant la logique de notre premier exemple.
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
... function test() { $requete = $this->db->get("Users"); foreach ($query->result as $resultat) { echo "ID : " $resultat->id " pseudo : " $resultat->pseudo "<br />"; } // correspond a Select username From Users $this->db->select('username'); $requete = $this->db->get("Users"); foreach ($query->result_array() as $resultat) { echo "pseudo : " $resultat->pseudo "<br />"; } // correspond a SELECT id, username FROM Users WHERE id > 1 $this->db->select('id, username'); $this->db->where('id > 1'); $requete = $this->db->get("Users"); foreach ($query->result_array() as $resultat) { echo "pseudo : " $resultat->pseudo "<br />"; } } }
Il existe encore pleins d’autres méthodes pour réaliser des requêtes pour cela je vous conseille d’aller faire un tour sur le manuel et de consulter Active Record Class ou plus généralement la documentation complète sur la librarie Database. Vous devriez reconnaître des éléments du tutoriel.
En attendant les tutoriels suivants, vous pouvez par l’intermédiaire des commentaires ou en me joignant directement, me dire ce que vous aimeriez que nous mettions en place pour les tutoriels suivants (blog, petites annonces, réduction d’URL…).