PHP
SQLite3
Поиск…
Запрос базы данных
<?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);
}
?>
См. Также http://www.riptutorial.com/topic/184
Получение только одного результата
В дополнение к использованию операторов LIMIT SQL вы также можете использовать функцию SQLite3 querySingle
для извлечения одной строки или первого столбца.
<?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
Это полный пример всех распространенных API-интерфейсов, связанных с SQLite. Цель состоит в том, чтобы заставить вас работать и работать очень быстро. Вы также можете получить исполняемый файл PHP этого урока.
Создание / открытие базы данных
Сначала создадим новую базу данных. Создайте его, только если файл не существует и открыть его для чтения / записи. Расширение файла зависит от вас, но .sqlite
довольно распространен и не .sqlite
пояснений.
$db = new SQLite3('analytics.sqlite', SQLITE3_OPEN_CREATE | SQLITE3_OPEN_READWRITE);
Создание таблицы
$db->query('CREATE TABLE IF NOT EXISTS "visits" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
"user_id" INTEGER,
"url" VARCHAR,
"time" DATETIME
)');
Вставка образцов данных.
Целесообразно обернуть связанные запросы в транзакции (с ключевыми словами BEGIN
и COMMIT
), даже если вам не нужна атомарность. Если вы этого не сделаете, SQLite автоматически обматывает каждый запрос в транзакции, что сильно замедляет все. Если вы новичок в SQLite, вы можете быть удивлены, почему INSERT настолько медленны .
$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');
Вставьте потенциально опасные данные с помощью подготовленного оператора. Вы можете сделать это с помощью названных параметров :
$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
Получение данных
Давайте приступим к сегодняшним посещениям пользователя № 42. Мы снова будем использовать подготовленный оператор, но с пронумерованными параметрами на этот раз, которые являются более краткими:
$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";
Примечание. Если строк больше нет, fetchArray () возвращает
false
. Вы можете воспользоваться этим вwhile
цикл.
Освободите память - это не выполняется автоматически, пока ваш скрипт запущен
$result->finalize();
Shorthands
Вот полезная стенограмма для извлечения одной строки в качестве ассоциативного массива. Второй параметр означает, что мы хотим, чтобы все выбранные столбцы.
Остерегайтесь, эта стенография не поддерживает привязку параметров, но вместо этого вы можете избежать строк. Всегда добавляйте значения в котировки SINGLE! Двойные кавычки используются для имен таблиц и столбцов (аналогично обратным выводам в 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";
Еще одно полезное сокращение для получения только одного значения.
$userCount = $db->querySingle('SELECT COUNT(DISTINCT "user_id") FROM "visits"');
echo "User count: $userCount\n";
echo "\n";
Убираться
Наконец, закройте базу данных. Это делается автоматически, когда скрипт заканчивается.
$db->close();