Publié le 07/10/2014
Auteur BlackBear
Réseaux sociaux
0 partages
0 tweets
2 plus
3 commentaires

Base de données SQLite avec PDO et PHP

Dans un site internet, on a besoin de stocker de nombreuses données accessibles via PHP. Les bases de données SQLite combine les avantages d'une table MySql et la vitesse d'un accès fichier.

Définition du module libsqlite3

Pour ceux qui ne le connaissait pas en encore, SQLite est probablement le moteur de base de données le plus utilisé, la librairie est utilisée aussi bien sur un PC, sous Linux ou encore sur les smartphone. Contrairement à MySql, SQLite n'a pas besoin d'une architecture client/serveur pour fonctionner, les fonctions sont contenues dans une librairie et les données dans un fichier.
Premier chose à faire est de vérifier que l'extension est activée sous LAMP avec phpinfo(), il s'agit du module pdo_sqlite.

Comment installer sqlite3 ?
Par exemple sur une distribution Linux Ubuntu, lancer dans le terminal
sudo apt-get install sqlite3

La suite du tutoriel est construit à partir de l'utilisation de SQLite avec PDO. Avec de poursuivre, vérifiez que sqlite s'affiche bien lors du test des drivers supportés par PDO
<?php
foreach (PDO::getAvailableDrivers() as $pro_driver) {
    echo 'disponible: '.$pro_driver . '
'
; } ?>

Créer une table avec SQLite

Comme nous l'avons vu, la base SQLite fonctionne directement à partir d'un driver inclu dans PHP, nul besoin d'une communication avec un serveur. Il existe 2 modes pour créer des tables: les données sont stockées dans un fichier ou alors directement en mémoire avec new PDO('sqlite::memory:');

Pour créer un table, il suffit de se connecter avec PDO, le fichier est crée automatiquement. Les requêtes sont envoyées avec le langage SQL, de la même manière qu'avec MySQL. Par exemple pour une table membre, comportant un ID, le nom et la date d'inscription, la requete SQL est la suivante:

<?php
//Ouvrir ou créer la base de données member
$db = new PDO('sqlite:member.sqlite');
//Activer les exceptions
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//Créer la table
$db->exec("CREATE TABLE IF NOT EXISTS TB_MEMBER (
                    ME_ID INTEGER PRIMARY KEY AUTOINCREMENT, 
                    ME_NAME VARCHAR(100), 
                    ME_DATE DATETIME)");
?>

Ajouter une ligne à la table TB_MEMBER

Si vous avez l'habitude d'utiliser PDO, le code vous semblera familier, préparer la requête d'insertion puis exécuter avec les paramètres.
<?php
//Ouvrir ou créer la base de données member
$db = new PDO('sqlite:member.sqlite');
//Activer les exceptions
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//Requete SQL d'insertion
$sql = 'INSERT INTO TB_MEMBER (ME_NAME,ME_DATE) values(:ME_NAME,:ME_DATE)';
$stmt = $db->prepare($sql);
//Paramètre PDO
$P = array('ME_NAME' => 'BlackBear',
    'ME_DATE' => time());
//Executer la requete
$stmt->execute($P);
$stmt->closeCursor();
?>

Certains diront: t'as oublié ME_ID !
Nous avons définit le champs ME_ID en AUTOINCREMENT, la valeur de ID membre dans la table est ajoutée automatiquement. Le module SQLite est magique !

Sélectionner les lignes de la table avec SQLite

La sélection de donnée fonctionne également avec PDO, voyons comment sélectionner toutes les entrées de la table.

<?php
//Ouvrir ou créer la base de données member
$db = new PDO('sqlite:member.sqlite');
//Activer les exceptions
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = 'SELECT * FROM TB_MEMBER';
$stmt = $db->prepare($sql);
$stmt->execute();
//extaire les données
$member_list = $stmt->fetchAll(PDO::FETCH_ASSOC);
$stmt->closeCursor();
//Parcourir la liste des membres
foreach ($member_list as $row) {
    echo '
ID '
.$row['ME_ID'].' Nom '.$row['ME_NAME'].' inscrit depuis '.date("d/m/Y H:i:s", $row['ME_DATE']); } ?>

En ce qui concerne la date d'inscription, la date est stockée sous forme d'un timestamp Unix dans la base de donnée. La date est décodée avec la fonction date("d/m/Y H:i:s").

Ce tutoriel est un rapide aperçu des possibilités et du fonctionnement de libsqlite3. Le principale avantage réside dans l'absence de serveur comme pour MySQL. Avec la librairie SQLite, tout est stocké dans un fichier que l'on peut transférer d'un poste vers un autre support, idéal pour la sauvegarder des données.

Ajouter un commentaire

Les champs marqués d'un * sont obligatoires, les adresses emails se sont pas publiées.
avatar hungerGames

Publié par hungerGames

le 09/04/2015 à 08:00:40

Salut!
je suis un debutant en php,et lorsque j'ai execute le code
sur la creation de la base 'member',on m'a affiche cet message:
"Undefined class constant 'ATT_ERRMODE' in D:\etc\www\createTable.php on line 14"
j'avais cherche tous les issus,mais je ne trouve pas la solution.
alors j'ai besoin de votre aide

avatar Fobec

Publié par Fobec

le 09/04/2015 à 08:44:40

a priori il manque simplement le R dans le nom de la constante
PDO::ATTR_ERRMODE en remplacement de PDO::ATT_ERRMODE

avatar rsuinux

Publié par rsuinux

le 26/11/2015 à 09:50:34

Merci pour cet article.
Cela m'a debloque pour sqlite3 sur openwrt :)
Cordialement.

A lire aussi

Réseaux sociaux
Présentation de l'article
Catégorie
php5 - db
Mise a jour
07/10/2014
Visualisation
vu 5278 fois
Public
Internaute
Auteur de la publication
BlackBear
Membre junior
Auteur de 3 articles
|BIO_PSEUDO|
Commentaires récents

Publié par nico dans java

Petite erreur constate.
Apparemment il faut remplacer :
&mailTo = &?body=Envoyer un email avec Java
par &mailTo = < et commercial sans '<' et '>' &body=Envoyer un email avec Java

Publié par bakouz dans java

Bonjour Axel,
je suis tombe sur ton site un peu par hasard.
Hasard car je ne le connaissais pas jusqu'a maintenant, et non du hasard car c'est exactement ce genre de class que je recherchais. !...

Publié par Fobec dans java

As-tu essaye sans le parametre de la cle ?
(supprimer la ligne url += "&key=" + this.ApiKey;)
A priori, cela fonctionne sans aucune authentification sur l'api ;)

Publié par zozo dans logiciel

comment ca marche??????????

Publié par jyfv dans CMS

hgfdhgfdhgf