PHP
SQLite3
Sök…
Fråga efter en databas
<?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);
}
?>
Se även http://www.riptutorial.com/topic/184
Hämtar bara ett resultat
Förutom att använda LIMIT SQL-satser kan du också använda SQLite3-funktionens querySingle
att hämta en enda rad eller den första kolumnen.
<?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);
?>
SQLite3 Quickstart Tutorial
Detta är ett komplett exempel på alla vanligt använda SQLite-relaterade API: er. Målet är att få dig igång riktigt snabbt. Du kan också få en körbar PHP-fil för den här självstudien.
Skapa / öppna en databas
Låt oss skapa en ny databas först. Skapa den bara om filen inte finns och öppna den för läsning / skrivning. Filens förlängning är upp till dig, men .sqlite
är ganska vanligt och självförklarande.
$db = new SQLite3('analytics.sqlite', SQLITE3_OPEN_CREATE | SQLITE3_OPEN_READWRITE);
Skapa en tabell
$db->query('CREATE TABLE IF NOT EXISTS "visits" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
"user_id" INTEGER,
"url" VARCHAR,
"time" DATETIME
)');
Infoga provdata.
Det är tillrådligt att radera relaterade frågor i en transaktion (med nyckelord BEGIN
och COMMIT
), även om du inte bryr dig om atomicitet. Om du inte gör det, lägger SQLite automatiskt in varje enskild fråga i en transaktion, vilket bromsar allt oerhört. Om du är ny med SQLite kan du bli förvånad över varför INSERTS är så långsamma .
$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');
Infoga potentiellt osäkra data med ett förberett uttalande. Du kan göra detta med namngivna parametrar :
$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
Hämtar data
Låt oss hämta dagens besök av användare # 42. Vi kommer att använda ett förberett uttalande igen, men med numrerade parametrar den här gången, som är mer kortfattade:
$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";
Obs! Om det inte finns fler rader returnerar fetchArray ()
false
. Du kan dra nytta av detta i enwhile
slinga.
Frigör minne - detta inte sker automatiskt, medan manus körs
$result->finalize();
short
Här är en användbar kortfattning för att hämta en enda rad som ett associerande array. Den andra parametern betyder att vi vill ha alla de valda kolumnerna.
Se upp, den korta listan stöder inte parameterbindning, men du kan komma undan strängarna istället. Sätt alltid värdena i ENDA citat! Dubbla citat används för tabell- och kolumnnamn (liknande backticks i 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";
En annan användbar kortfattning för att hämta bara ett värde.
$userCount = $db->querySingle('SELECT COUNT(DISTINCT "user_id") FROM "visits"');
echo "User count: $userCount\n";
echo "\n";
Städar upp
Stäng slutligen databasen. Detta görs dock automatiskt när skriptet är klart.
$db->close();