PHP
SQLite3
Zoeken…
Een database opvragen
<?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);
}
?>
Zie ook http://www.riptutorial.com/topic/184
Slechts één resultaat ophalen
Naast het gebruik van LIMIT SQL-instructies kunt u ook de SQLite3-functie querySingle
gebruiken om een enkele rij of de eerste kolom op te halen.
<?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);
?>
QuickStart-zelfstudie voor SQLite3
Dit is een compleet voorbeeld van alle veelgebruikte SQLite-gerelateerde API's. Het doel is om u snel aan de slag te krijgen. Je kunt ook een uitvoerbaar PHP-bestand van deze tutorial krijgen.
Een database maken / openen
Laten we eerst een nieuwe database maken. Maak het alleen als het bestand niet bestaat en open het voor lezen / schrijven. De extensie van het bestand is aan jou, maar .sqlite
komt vrij veel voor en .sqlite
zich.
$db = new SQLite3('analytics.sqlite', SQLITE3_OPEN_CREATE | SQLITE3_OPEN_READWRITE);
Een tabel maken
$db->query('CREATE TABLE IF NOT EXISTS "visits" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
"user_id" INTEGER,
"url" VARCHAR,
"time" DATETIME
)');
Voorbeeldgegevens invoegen.
Het is raadzaam om gerelateerde vragen in een transactie te verpakken (met zoekwoorden BEGIN
en COMMIT
), zelfs als u niet geïnteresseerd bent in atomiciteit. Als u dit niet doet, verpakt SQLite automatisch elke query in een transactie, waardoor alles enorm wordt vertraagd. Als SQLite nieuw voor je is, zal je misschien verrast zijn waarom de INSERTs zo traag zijn .
$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');
Voeg potentieel onveilige gegevens in met een voorbereide verklaring. U kunt dit doen met benoemde parameters :
$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
Data ophalen
Laten we de bezoeken van gebruiker # 42 van vandaag ophalen. We zullen opnieuw een voorbereide verklaring gebruiken, maar deze keer met genummerde parameters , die beknopter zijn:
$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";
Opmerking: als er geen rijen meer zijn, retourneert fetchArray ()
false
. Je kunt hier in eenwhile
van profiteren.
Maak geheugen vrij - dit gebeurt niet automatisch, terwijl uw script actief is
$result->finalize();
shorthands
Hier is een handig steno voor het ophalen van een enkele rij als een associatieve array. De tweede parameter betekent dat we alle geselecteerde kolommen willen.
Pas op, deze steno ondersteunt geen parameterbinding, maar u kunt in plaats daarvan aan de tekenreeksen ontsnappen. Zet de waarden altijd tussen enkele aanhalingstekens! Dubbele aanhalingstekens worden gebruikt voor tabel- en kolomnamen (vergelijkbaar met backticks in 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";
Nog een handige steno voor het ophalen van slechts één waarde.
$userCount = $db->querySingle('SELECT COUNT(DISTINCT "user_id") FROM "visits"');
echo "User count: $userCount\n";
echo "\n";
Schoonmaken
Sluit ten slotte de database. Dit gebeurt echter automatisch wanneer het script is voltooid.
$db->close();