PHP
SQLite3
Recherche…
Interrogation d'une base de données
<?php
//Create a new SQLite3 object from a database file on the server.
$database = new SQLite3('mysqlitedb.db');
//Query the database with SQL
$results = $database->query('SELECT bar FROM foo');
//Iterate through all of the results, var_dumping them onto the page
while ($row = $results->fetchArray()) {
var_dump($row);
}
?>
Voir aussi http://www.riptutorial.com/topic/184
Récupérer un seul résultat
Outre l'utilisation des instructions SQL LIMIT, vous pouvez également utiliser la fonction SQLite3 querySingle
pour extraire une seule ligne ou la première colonne.
<?php
$database = new SQLite3('mysqlitedb.db');
//Without the optional second parameter set to true, this query would return just
//the first column of the first row of results and be of the same type as columnName
$database->querySingle('SELECT column1Name FROM table WHERE column2Name=1');
//With the optional entire_row parameter, this query would return an array of the
//entire first row of query results.
$database->querySingle('SELECT column1Name, column2Name FROM user WHERE column3Name=1', true);
?>
Didacticiel de démarrage rapide SQLite3
Ceci est un exemple complet de toutes les API SQLite fréquemment utilisées. Le but est de vous mettre au travail très vite. Vous pouvez également obtenir un fichier PHP exécutable de ce tutoriel.
Créer / ouvrir une base de données
Créons d'abord une nouvelle base de données. Créez-le uniquement si le fichier n'existe pas et ouvrez-le pour lire / écrire. L'extension du fichier dépend de vous, mais .sqlite
est assez courant et explicite.
$db = new SQLite3('analytics.sqlite', SQLITE3_OPEN_CREATE | SQLITE3_OPEN_READWRITE);
Créer une table
$db->query('CREATE TABLE IF NOT EXISTS "visits" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
"user_id" INTEGER,
"url" VARCHAR,
"time" DATETIME
)');
Insérer des exemples de données.
Il est conseillé d’emballer les requêtes associées dans une transaction (avec les mots-clés BEGIN
et COMMIT
), même si l’importance de l’atome ne vous intéresse pas. Si vous ne le faites pas, SQLite encapsule automatiquement chaque requête dans une transaction, ce qui ralentit considérablement tout. Si vous êtes nouveau sur SQLite, vous pourriez être surpris de savoir pourquoi les INSERT sont si lents .
$db->exec('BEGIN');
$db->query('INSERT INTO "visits" ("user_id", "url", "time")
VALUES (42, "/test", "2017-01-14 10:11:23")');
$db->query('INSERT INTO "visits" ("user_id", "url", "time")
VALUES (42, "/test2", "2017-01-14 10:11:44")');
$db->exec('COMMIT');
Insérez des données potentiellement dangereuses avec une instruction préparée. Vous pouvez le faire avec les paramètres nommés :
$statement = $db->prepare('INSERT INTO "visits" ("user_id", "url", "time")
VALUES (:uid, :url, :time)');
$statement->bindValue(':uid', 1337);
$statement->bindValue(':url', '/test');
$statement->bindValue(':time', date('Y-m-d H:i:s'));
$statement->execute(); you can reuse the statement with different values
Récupération des données
Prenons les visites d'aujourd'hui de l'utilisateur # 42. Nous utiliserons à nouveau une instruction préparée, mais cette fois avec des paramètres numérotés , plus concis:
$statement = $db->prepare('SELECT * FROM "visits" WHERE "user_id" = ? AND "time" >= ?');
$statement->bindValue(1, 42);
$statement->bindValue(2, '2017-01-14');
$result = $statement->execute();
echo "Get the 1st row as an associative array:\n";
print_r($result->fetchArray(SQLITE3_ASSOC));
echo "\n";
echo "Get the next row as a numeric array:\n";
print_r($result->fetchArray(SQLITE3_NUM));
echo "\n";
Remarque: S'il n'y a plus de lignes, fetchArray () renvoie
false
. Vous pouvez profiter de cela dans unwhile
boucle.
Libérez la mémoire - ceci ne se fait pas automatiquement, alors que votre script est en cours d'exécution
$result->finalize();
Sténographie
Voici un raccourci utile pour récupérer une seule ligne en tant que tableau associatif. Le deuxième paramètre signifie que nous voulons toutes les colonnes sélectionnées.
Attention, cet raccourci ne supporte pas la liaison de paramètres, mais vous pouvez échapper les chaînes à la place. Toujours mettre les valeurs en citations SINGLE! Les guillemets doubles sont utilisés pour les noms de table et de colonne (similaires aux raccourcis de MySQL).
$query = 'SELECT * FROM "visits" WHERE "url" = \'' .
SQLite3::escapeString('/test') .
'\' ORDER BY "id" DESC LIMIT 1';
$lastVisit = $db->querySingle($query, true);
echo "Last visit of '/test':\n";
print_r($lastVisit);
echo "\n";
Un autre raccourci utile pour récupérer une seule valeur.
$userCount = $db->querySingle('SELECT COUNT(DISTINCT "user_id") FROM "visits"');
echo "User count: $userCount\n";
echo "\n";
Nettoyer
Enfin, fermez la base de données. Cela se fait automatiquement à la fin du script.
$db->close();