PHP Didacticiel de démarrage rapide SQLite3


Exemple

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 un while 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();