{"id":18976653,"url":"https://github.com/paul-schuhm/demo-pdo-sqlite","last_synced_at":"2026-05-02T03:09:06.256Z","repository":{"id":211750015,"uuid":"729872004","full_name":"paul-schuhm/demo-pdo-sqlite","owner":"paul-schuhm","description":"Une démo et de la documentation pour bien démarrer avec les bases de données SQLite et PHP.","archived":false,"fork":false,"pushed_at":"2023-12-10T16:51:01.000Z","size":10,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-02T14:47:54.886Z","etag":null,"topics":["demo","documentation","pdo","pdo-sqlite","php","sqlite"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/paul-schuhm.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2023-12-10T16:05:48.000Z","updated_at":"2023-12-10T16:49:18.000Z","dependencies_parsed_at":"2023-12-10T17:39:06.945Z","dependency_job_id":null,"html_url":"https://github.com/paul-schuhm/demo-pdo-sqlite","commit_stats":null,"previous_names":["paul-schuhm/demo-pdo-sqlite"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/paul-schuhm/demo-pdo-sqlite","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paul-schuhm%2Fdemo-pdo-sqlite","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paul-schuhm%2Fdemo-pdo-sqlite/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paul-schuhm%2Fdemo-pdo-sqlite/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paul-schuhm%2Fdemo-pdo-sqlite/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/paul-schuhm","download_url":"https://codeload.github.com/paul-schuhm/demo-pdo-sqlite/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paul-schuhm%2Fdemo-pdo-sqlite/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32521140,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-02T01:12:54.858Z","status":"online","status_checked_at":"2026-05-02T02:00:05.923Z","response_time":132,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["demo","documentation","pdo","pdo-sqlite","php","sqlite"],"created_at":"2024-11-08T15:25:43.812Z","updated_at":"2026-05-02T03:09:06.228Z","avatar_url":"https://github.com/paul-schuhm.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Démo `pdo_sqlite`, travailler avec une base de données SQLite avec PHP\n\nUne démo et de la documentation pour bien démarrer avec les bases de données SQLite et PHP.\n\n- [Démo `pdo_sqlite`, travailler avec une base de données SQLite avec PHP](#démo-pdo_sqlite-travailler-avec-une-base-de-données-sqlite-avec-php)\n  - [Installations](#installations)\n  - [SQLite, quelques bases](#sqlite-quelques-bases)\n    - [Le client sqlite3](#le-client-sqlite3)\n    - [Démarrer](#démarrer)\n    - [Persister une base de données](#persister-une-base-de-données)\n    - [Gestion des bases de données](#gestion-des-bases-de-données)\n    - [Changer le format de sortie, les *modes* d'affichage de SQLite](#changer-le-format-de-sortie-les-modes-daffichage-de-sqlite)\n    - [Rediriger la sortie et écrire le résultat d'une requête dans un fichier](#rediriger-la-sortie-et-écrire-le-résultat-dune-requête-dans-un-fichier)\n    - [Rediriger l'entrée ou charger des scripts SQL en *batch mode*](#rediriger-lentrée-ou-charger-des-scripts-sql-en-batch-mode)\n  - [Travailler avec une base de données SQLite dans un projet PHP](#travailler-avec-une-base-de-données-sqlite-dans-un-projet-php)\n  - [Références](#références)\n    - [SQLite](#sqlite)\n    - [PHP et SQLite](#php-et-sqlite)\n\n\n## Installations\n\n- [Installer SQLite](https://www.sqlite.org/download.html)\n- [Installer l'extension `PDO`](https://www.php.net/manual/fr/pdo.installation.php)\n- Installer l'extension [`php_pdo_sqlite`](https://www.php.net/manual/en/ref.pdo-sqlite.php)\n\n~~~bash\n#Vérifier l'installation et l'activation des extensions PDO et pdo_sqlite\nphp -m | grep \"pdo_sqlite\nPDO\"\nPDO\npdo_sqlite\n~~~\n\n## SQLite, quelques bases\n\n### Le client sqlite3\n\nsqlite3 est une interface en ligne de commande pour manipuler les bases de données relationnelle SQLite version 3. Une base de données SQLite est un simple fichier sur le disque ou peut être hébergée directement en mémoire.\n\n~~~bash\n#Le manuel de sqlite3\nman sqlite3\n#Afficher la version installée\nsqlite3 -version\n#Obtenir de l'aide les options de sqlite3\nsqlite3 -help\n#Executer un fichier à l'ouverture de l'interpréteur de commandes\nsqlite3 -init ddl.sql\n~~~\n\nDans l'interpréteur\n\n~~~bash\n#Afficher l'aide\nsqlite\u003e.help\n#Fermer la connexion et quitter\nsqlite\u003e.exit\n#Afficher les bases de données attachées (aucun à l'ouverture par défaut)\nsqlite\u003e.databases\n#Afficher les tables de la base de données attachée\nsqlite\u003e.tables\n#Montre les valeurs des variables d'environnement (configuration de sqlite3)\nsqlite\u003e.show\n#Ouvrir une base de données persistante (fichier)\nsqlite\u003e.open db.sql3\n~~~\n\n### Démarrer\n\nA l'ouverture, sqlite3 ouvre par défaut [une base de données en mémoire](https://www.sqlite.org/inmemorydb.html) (qui est le nom de fichier réservé `:memory`). La base de données ouverte est toujours nommée `main`. La base de données est *volatile* et toutes les transactions sur cette base seront perdues à la fermeture de la connexion. En effet, une base de données en mémoire est automatiquement détruite quand la connexion qui les a crées est close.\n\n~~~bash\nsqlite3\nsqlite\u003e CREATE TABLE IF NOT EXISTS Foo(id INT PRIMARY KEY); \nsqlite\u003e.tables\nFoo\nsqlite\u003e.exit\nsqlite3\n#La liste est bien vide\nsqlite\u003e.tables\n~~~\n\nContrairement à la majorité des SGBDR, SQLite n'utilise pas l'architecture client/serveur. Une connexion à une base de données SQLite est représentée par un pointeur vers une instance d'un objet \"sqlite3\". Lorsque la connexion est fermée, la mémoire est libérée et les données perdues.\n\n### Persister une base de données\n\n~~~bash\nsqlite3 mydb.sql3\n#A la première requête sqlite3 va créer le fichier mydb.sql3 s'il n'existe pas\n#pour persister la base\nsqlite\u003e CREATE TABLE Foo(id INT);\nsqlite\u003e .databases\nsqlite\u003e main: /path/to/mydb.sql3 r/w\n#On ferme la connexion\nsqlite\u003e.exit\nsqlite3 mydb.sql3\nsqlite\u003e .databases\n#La transaction précédente a bien été enregistrée dans le fichier mydb.sql3\n#qui persiste la base sur le disque\nsqlite\u003e main: /path/to/mydb.sql3 r/w\nsqlite\u003e .tables\nsqlite\u003eFoo\n~~~\n\nOn peut voir qu'en passant un fichier en argument de sqlite3, la connexion associe le schéma principal `main` au fichier renseigné. Le fichier devient donc notre base par défaut et les transactions sont enregistrées sur le disque.\n\n### Gestion des bases de données\n\nEn SQLite, il n'y a pas d'instruction `CREATE DATABASE`. Une connexion à une base de données SQLite peut contenir plusieurs bases de données. Une base de données est soit contenue dans un fichier, soit en mémoire. Par exemple, lorsque l'on ouvre une connexion sans indiquer de fichier, la base de données `main` pointe sur une base de données maintenue en mémoire.\n\nOn peut *attacher* et *détacher* d'autres bases de données en chargeant des fichiers avec l'instruction [`ATTACH DATABASE`](https://www.sqlite.org/lang_attach.html). Pour cela il faut indiquer le fichier à charger (qui contient la base) et le nom du schéma.\n\nCréons une nouvelle base de données `otherdb.sql3`\n\n~~~bash\nsqlite3 otherdb.sql3\n~~~\n\n~~~bash\nsqlite\u003e CREATE TABLE Bar(id INT);\nsqlite\u003e .databases\nsqlite\u003e main: /path/to/otherdb.sql3 r/w\n#On attache notre base de données précédente à la connexion sur le schéma 'mydb'\nsqlite\u003e ATTACH DATABASE 'mydb.sql3' AS mydb;\n#Lister les bases de données. On voit également les droits en lecture et écriture\nsqlite\u003e .databases\nmain: /path/to/otherdb.sql3 r/w\nmydb: /path/to/mydb.sql3 r/w\nsqlite\u003e .tables\n#La table Bar sur le schéma principal (fichier otherdb.sql3) \n# et la table Foo sur le schéma 'mydb'  (fichier mydb.sql3)\nBar       mydb.Foo\n#Où va être créée la table Foo ?\nsqlite\u003e CREATE TABLE Foo(id INT);\nsqlite\u003e DETACH mydb;\nsqlite\u003e INSERT INTO Foo(id) VALUES(1), (2), (3);\n~~~\n\nLa commande `.databases` montre toutes les bases de données ouvertes dans la connexion. La commande `.schema` affiche le schéma complet de la base de données (i.e l'ensemble des instructions SQL la définissant). La commande `.schema`, comme la commande `.tables`, affiche le schéma de toutes les bases de données attachées. On peut détacher une base avec [DETACH](https://www.sqlite.org/lang_detach.html).\n\n### Changer le format de sortie, les *modes* d'affichage de SQLite\n\nsqlite3 peut montrer les résultats d'une requête dans 14 formats différents par défaut : ascii, box, csv, column, **list** (par défaut), markdown, quote, json, html, etc.\n\n~~~bash\n#Afficher le mode courant (format de sortie)\nsqlite\u003e .mode\ncurrent output mode: list\nsqlite\u003e SELECT * FROM Foo;\n1\n2\n3\nsqlite\u003e .mode html\nsqlite\u003e SELECT * FROM Foo;\n\u003cTR\u003e\u003cTD\u003e1\u003c/TD\u003e\n\u003c/TR\u003e\n\u003cTR\u003e\u003cTD\u003e2\u003c/TD\u003e\n\u003c/TR\u003e\n\u003cTR\u003e\u003cTD\u003e3\u003c/TD\u003e\n\u003c/TR\u003e\nsqlite\u003e .mode column\nid\n--\n1 \n2 \n3 \nsqlite\u003e .mode box --wrap 30\nsqlite\u003e SELECT * FROM Foo;\n┌────┐\n│ id │\n├────┤\n│ 1  │\n│ 2  │\n│ 3  │\n└────┘\n~~~\n\n\u003e Il existe beaucoup d'options possibles. En savoir plus avec la commande `.help .mode`.\n\n### Rediriger la sortie et écrire le résultat d'une requête dans un fichier\n\nPar défaut, sqlite3 retourne les résultats d'une requête sur la sortie standard. On peut rediriger la sortie facilement avec la commande `.output` et `.once`. \n\n~~~bash\nsqlite\u003e .mode markdown\nsqlite\u003e .output foo.md\nsqlite\u003e SELECT * FROM Foo;\nsqlite\u003e .exit\n$ cat foo.md\n| id |\n|----|\n| 1  |\n| 2  |\n| 3  |\n~~~\n\nOn peut même utiliser le pipe directement depuis sqlite3 pour injecter le résultat d'une requête vers un autre processus !\n\n~~~bash\n#La commande .once redirige la sortie que pour la commande suivante\nsqlite\u003e .once | grep 2\nsqlite\u003e SELECT * FROM Foo;\nsqlite\u003e SELECT * FROM Foo;\n1\n2\n3\n~~~\n\n### Rediriger l'entrée ou charger des scripts SQL en *batch mode*\n\nPar défaut, sqlite3 lit les requêtes SQL depuis l'entrée standard. On peut également charger un fichier contenant des requêtes SQL (*batch mode*) avec la commande `.read`\n\n~~~bash\n#Charger le script ddl.sql (batch mode)\nsqlite\u003e .read ddl.sql\nsqlite\u003e .tables\nBar Baz Foo\n# Afficher le schema de la table Bar\nsqlite\u003e .schema Bar\nCREATE TABLE Bar(id INT PRIMARY KEY, idFoo INT, FOREIGN KEY(idFoo) REFERENCES Foo(id));\n~~~\n\n## Travailler avec une base de données SQLite dans un projet PHP\n\nSQLite, comme tous les autres SGBDR, peut être manipulée par un programme PHP via [l'interface PDO (PHP Data Objects)](https://www.php.net/manual/fr/intro.pdo.php). L'implémentation de PDO pour SQLite (le *driver*) est le module php `pdo_sqlite`, installé par défaut. Une fois une connexion ouverte, le code PHP pour dialoguer avec SQLite est donc le même qu'avec n'importe quel autre SGBDR.\n\n~~~php\n//Ouvrir la base de données stockée dans le fichier db.sql3 dans le repertoire courant\n$dsn = 'sqlite:db.sql3';\n$pdo = new PDO($dsn);\n//Un prepared statement PDO\n$ps = $pdo-\u003eprepare('CREATE Table Foo(id INT PRIMARY KEY);', array());\n//Execution de la requête\n$result = $ps-\u003eexecute();\n~~~\n\n## Références\n\n### SQLite\n\n- [SQLite Documentation](https://www.sqlite.org/docs.html)\n- [Command Line Shell For SQLite : Getting Started](https://www.sqlite.org/cli.html#dschema)\n- [Alphabetical List Of Documents SQLite](https://www.sqlite.org/doclist.html), articles de la doc officielle sur sqlite3 et sur ses instructions\n\n### PHP et SQLite\n\n- [Fonctions SQLite (PDO_SQLITE)](https://www.php.net/manual/fr/ref.pdo-sqlite.php)\n- [PHP PDO](https://www.php.net/manual/fr/book.pdo.php)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpaul-schuhm%2Fdemo-pdo-sqlite","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpaul-schuhm%2Fdemo-pdo-sqlite","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpaul-schuhm%2Fdemo-pdo-sqlite/lists"}